计算几何之 点在直线上的投影 代码模板与证明

点在直线上的投影

已知直线上两点a、b和直线外一点p,求p在直线ab上的投影点

代码模板
Point projection(Point p,Point a,Point b)
{
	Vector v = b - a,u = p - a;
	return a + v * (dot(v,u) / dot(v,v));	//dot是两向量的点积
}
证明

如下图,p的投影点p’就是a+ x ⃗ \vec x x (直线的点向式),所以我们只要求出 x ⃗ \vec x x 就能求出p’了。
eg
x ⃗ \vec x x = t v ⃗ \vec v v ,这个t就是 ∣ x ⃗ ∣ |\vec x| x ∣ v ⃗ ∣ |\vec v| v 的比值, v ⃗ ⋅ u ⃗ = ∣ v ⃗ ∣ ⋅ ∣ u ⃗ ∣ ⋅ c o s θ \vec v \cdot \vec u = |\vec v| \cdot |\vec u| \cdot cos\theta v u =v u cosθ,所以 v ⃗ \vec v v u ⃗ \vec u u 的点积就是 ∣ v ⃗ ∣ |\vec v| v ∣ x ⃗ ∣ |\vec x| x ,然后我们除以 ∣ v ⃗ ∣ |\vec v| v 再除以 ∣ v ⃗ ∣ |\vec v| v 就得到了比值t,而除以两次就相当于除以 ∣ v ⃗ ∣ 2 |\vec v|^2 v 2,就等于 v ⃗ \vec v v v ⃗ \vec v v 自己的点积。

求出比值t就能求出向量x;求出向量x就能求出点p’。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值