空間點與直線距離算法

1. 原理推導

令空間中點A與點B組成向量\(\overrightarrow{AB}\),向量外有一點P,那麼咱們要求的就是P與直線\(\overrightarrow{AB}\)的距離d。git

鏈接點A與點P,得直線向量\(\overrightarrow{AP}\)。將向量\(\overrightarrow{AB}\)\(\overrightarrow{AP}\)叉乘,根據向量叉乘的幾何意義,\(|\overrightarrow{AB} \times \overrightarrow{AP}|\)其實是一個平行四邊形面積,以下圖所示:github

imglink1

根據平行四邊形公式,很顯然咱們要求的d就是這個平行四邊形的高,也就是:spa

\[d = \frac{|\overrightarrow{AB} \times \overrightarrow{AP}|} {|\overrightarrow{AB}|} \]

2. 具體實現

直到了原理,具體的實現就很簡單了,只要套公式就能夠了。其中^是個本身重載實現的求叉乘的操做:3d

double CalDistancePointAndLine(Vec3d &point, Vec3d &lineBegin, Vec3d &lineEnd)
{
    //直線方向向量
    Vec3d n = lineEnd -lineBegin;

    //直線上某一點的向量到點的向量
    Vec3d m = point - lineBegin;

    return (n ^ m).length() / n.length();
}

詳細代碼code

3. 參考

  1. 空間向量如何求點到直線距離?
  2. 立體幾何:如何用空間向量方法求點到直線的距離?
  3. 向量運算(叉乘幾何意義)
相關文章
相關標籤/搜索