前言
上一篇文章中,我总结了关于两直线的相交情况;本文将继续总结平面图形的相关原理,关于点与直线的问题。
参考文献:《计算机图形学——用OpenGL实现(第2版)》 清华大学出版社
点到直线的距离
-
点到直线的距离
已知点A在直线L上,直线L的向量为 a ⃗ \vec a a,即可得直线L的方程为: L ( t ) = A + a ⃗ t L(t) = A + \vec a t L(t)=A+at
求点P到直线L的距离 R R R,我们可以使 b ⃗ = P − A \vec b = P - A b=P−A, b ⃗ \vec b b与 a ⃗ \vec a a的夹角为 θ \theta θ,则 R = ∣ b ⃗ ∣ s i n θ R = \vert \vec b \vert sin\theta R=∣b∣sinθ
根据向量的叉乘公式有 ∣ a ⃗ × b ⃗ ∣ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ s i n θ \vert \vec a \times \vec b \vert = \vert \vec a \vert \vert \vec b \vert sin \theta ∣a×b∣=∣a∣∣b∣sinθ
可得 R = ∣ a ⃗ × b ⃗ ∣ ∣ a ⃗ ∣ R = \frac {\vert \vec a \times \vec b \vert} { \vert \vec a \vert } R=∣a∣∣a×b∣ -
正交投影
同上述,我们可以对向量 b ⃗ \vec b b根据直线与直线的法向量方向做正交投影,而点P到直线L的距离 R R R就等于向量 b ⃗ \vec b b在直线法向量方向上的长度。
首先, a ⃗ ⊥ \vec a ^ \perp a⊥为向量 a ⃗ \vec a a的正交向量,投影可得 b ⃗ = K a ⃗ + M a ⃗ ⊥ \vec b = K\vec a + M\vec a ^ \perp b=Ka+Ma⊥
解方程,消除 a ⃗ ⊥ \vec a ^ \perp a⊥对方程的影响,左右同时点乘 a ^ \hat a a^,可得 b ⃗ ⋅ a ⃗ = K a ⃗ ⋅ a ⃗ \vec b \cdot \vec a = K\vec a \cdot \vec a b⋅a=Ka⋅a
即 K = b ⃗ ⋅ a ⃗ a ⃗ ⋅ a ⃗ K = \frac {\vec b \cdot \vec a} {\vec a \cdot \vec a} K=a⋅ab⋅a
同理 M = b ⃗ ⋅ a ⃗ ⊥ a ⃗ ⊥ ⋅ a ⃗ ⊥ M = \frac {\vec b \cdot \vec a ^ \perp} {\vec a ^ \perp \cdot \vec a ^ \perp } M=a⊥⋅a⊥b