1. 原理推導
令空間中點A與點B組成向量\(\overrightarrow{AB}\),向量外有一點P,那么我們要求的就是P與直線\(\overrightarrow{AB}\)的距離d。
連接點A與點P,得直線向量\(\overrightarrow{AP}\)。將向量\(\overrightarrow{AB}\)與\(\overrightarrow{AP}\)叉乘,根據向量叉乘的幾何意義,\(|\overrightarrow{AB} \times \overrightarrow{AP}|\)實際上是一個平行四邊形面積,如下圖所示:

根據平行四邊形公式,很顯然我們要求的d就是這個平行四邊形的高,也就是:
\[d = \frac{|\overrightarrow{AB} \times \overrightarrow{AP}|} {|\overrightarrow{AB}|} \]
2. 具體實現
直到了原理,具體的實現就很簡單了,只要套公式就可以了。其中^是個自己重載實現的求叉乘的操作:
double CalDistancePointAndLine(Vec3d &point, Vec3d &lineBegin, Vec3d &lineEnd)
{
//直線方向向量
Vec3d n = lineEnd -lineBegin;
//直線上某一點的向量到點的向量
Vec3d m = point - lineBegin;
return (n ^ m).length() / n.length();
}
