三維幾何-點和直線
阿新 • • 發佈:2018-12-17
直線的表示。
直線仍然可以用引數方程(點和向量)來表示,並且射線和線段仍然可以看成引數有取值範圍限制的直線,並且點到直線的投影和二維情形一樣。
點到直線/線段的距離。仍然可以用面積法(注意三維叉積是向量,要用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); }