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

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

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

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;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值