多维空间中求一个点相对一条线的对称点

多维空间中求一个点相对一条线的对称点

首先我们应该知道如何求在二维平面中求一个点相对于一条线的对称点

struct node {int x,y;
};
node H(node a,node k1,node k2) {node res;double dx,dy,u = 0,v = 0;dx = k1.x - k2.x;dy = k1.y - k2.y;u += (a.x-k1.x)*(k1.x-k2.x);u += (a.y-k1.y)*(k1.y-k2.y);v += dx*dx;v += dy*dy;u = u/v;res.x = k1.x +u*dx;res.y = k1.y +u*dy;return res;
}
node Get(node a,node k1,node k2) {node q = H(a,k1,k2);q.x = 2*q.x - a.x;q.y = 2*q.y - a.y;return q;
}

然后我们将二维拓展为多维即可

struct node {//n维 double x[n];
};
node H(node a,node k1,node k2) {node res;double u = 0,v = 0;for(i=0;i<n;i++) d[i] = k1.x[i] - k2.x[i];for(i=0;i<n;i++)u += (a.x[i]-k1.x[i])*(k1.x[i]-k2.x[i]);for(i=0;i<n;i++) v+=d[i]*d[i];u = u/v;for(i=0;i<n;i++) {res.x[i] = k1.x[i] + u*d[i];}return res;
}
node Get(node a,node k1,node k2) {node q = H(p,a,b);for(int i=0;i<n;i++)q.x[i] = 2*q.x[i] - a.x[i];return q;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部