令空間中點A與點B組成向量\(\overrightarrow{AB}\),向量外有一點P,那麼咱們要求的就是P與直線\(\overrightarrow{AB}\)的距離d。git
鏈接點A與點P,得直線向量\(\overrightarrow{AP}\)。將向量\(\overrightarrow{AB}\)與\(\overrightarrow{AP}\)叉乘,根據向量叉乘的幾何意義,\(|\overrightarrow{AB} \times \overrightarrow{AP}|\)其實是一個平行四邊形面積,以下圖所示:github
根據平行四邊形公式,很顯然咱們要求的d就是這個平行四邊形的高,也就是:spa
直到了原理,具體的實現就很簡單了,只要套公式就能夠了。其中^是個本身重載實現的求叉乘的操做:3d
double CalDistancePointAndLine(Vec3d &point, Vec3d &lineBegin, Vec3d &lineEnd) { //直線方向向量 Vec3d n = lineEnd -lineBegin; //直線上某一點的向量到點的向量 Vec3d m = point - lineBegin; return (n ^ m).length() / n.length(); }
詳細代碼code