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

点在直线上的投影

已知直线上两点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’了。
计算几何之 点在直线上的投影 代码模板与证明_第1张图片
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’。

你可能感兴趣的:(计算几何,算法,计算几何,点,直线,投影)