计算几何之 点在直线上的投影 代码模板与证明 柔光的暖阳◎ 2022-11-05 13:00 320阅读 0赞 ### 点在直线上的投影 ### 已知直线上两点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’。 [eg]: /images/20221023/0ce46bd6e591494a8e259d89e0e0fc70.png
还没有评论,来说两句吧...