[計算幾何] (平面上)點到線段的最短距離 向量法
阿新 • • 發佈:2018-12-11
給出點A、B的座標, 構成線段AB, 再給出一點P的座標, 求點P到線段AB的最短距離
程式程式碼
#include<cmath> #include<iostream> using namespace std; typedef struct node { double x, y; }*PNODE,NODE; double getDis2(NODE a, NODE b) //得到兩點距離的平方 { return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y); } double disMin(NODE A, NODE B,NODE P) { double r = ((P.x - A.x)*(B.x - A.x) + (P.y - A.y)*(B.y - A.y)) / getDis2(A,B); if (r <= 0) return sqrt(getDis2(A,P)); //第一種情況, 返回AP的長 else if (r >= 1) return sqrt(getDis2(B,P)); //第二種情況, 返回BP的長度 else //第三種情況, 返回PC的長度 { double AC = r*sqrt(getDis2(A,B)); //先求AC的長度,(AC=r*|AB|) return sqrt(getDis2(A,P)-AC*AC); //再勾股定理返回PC的長度 } } int main() { NODE A, B, P; cin >> A.x >> A.y; cin >> B.x >> B.y; cin >> P.x >> P.y; cout << disMin(A, B, P) << endl; return 0; }
如果覺得本文對你有啟發, 不妨贊一下, 在精神上鼓勵鼓勵博主;
如果有不懂的地方, 可以在下方留言, 博主一看到便會馬上回復;
如果發現本文有錯誤的地方, 歡迎指正。