1. 程式人生 > >三維幾何-點和直線

三維幾何-點和直線

直線的表示。

直線仍然可以用引數方程(點和向量)來表示,並且射線和線段仍然可以看成引數有取值範圍限制的直線,並且點到直線的投影和二維情形一樣。

點到直線/線段的距離。仍然可以用面積法(注意三維叉積是向量,要用Length函式而不是fabs)。

點P到直線AB的距離:

double DistanceToLine(const Point3 &P, const Point3 &A, const Point3 &B)
{
    Vector3 v1, v2;

    v1 = B - A;
    v2 = P - A;
    return Length(Cross(v1, v2)) / Length(v1);
}

點P到線段AB的距離。

double DistanceToSegment(const Point3 &P, const Point3 &A, const Point3 &B)
{
    if(A == B)
        return Length(P-A);

    Vector3 v1, v2, v3;

    v1 = B - A;
    v2 = P - A;
    v3 = P - B;
    if(dcmp(Dot(v1, v2)) < 0)
        return Length(v2);
    else if(dcmp(Dot(v1, v3)) > 0)
        return Length(v3);
    else
        return Length(Cross(v1, v2)) / Length(v1);
}