如何計算點到線段的最近距離

2021-08-18 05:33:50 字數 774 閱讀 7966

在二維/三維圖形學系統當中,線段的拾取是乙個經常使用的功能

如何根據滑鼠點來判斷線段是否被選擇了,最主要的方法之一是通過點到線段的最小距離來判定的

無論二維還是三維情況下,使用點到直線的距離公式似乎是最直接的選擇

但是不要忘記點到直線公式計算的是點和直線之間的關係,而不是點和線段之間的關係

演算法如下

class point

float distance(point p1, point p2);  // 返回兩點之間的距離

float distanceline(point  a, point b, point c)  // a和b是線段的兩個端點, c是檢測點

point  ab = b - a;

point ac = c-a;

float f = ab * ac;

if (f<0) return distance(c, a);

float d = ab * ab;

if ( f>d) return distance(c, b);

f = f/d;

point d = a + f *ab;   // c在ab線段上的投影點

return distance(c, d);

這個演算法計算量很少,在現在流行配置的計算機基本上在當中1秒鐘可以檢測出上百萬個線段

這個是檢測乙個點和乙個線段之間的最短距離的

對於乙個系統當中存在大量的線段需要檢測的時候,應該把線段按照區域劃分成組,建立乙個包圍盒

先檢測點是否在包圍盒內部,然後再進入組內檢測具體的線段

如何計算點到線段的最近距離

在二維 三維圖形學系統當中,線段的拾取是乙個經常使用的功能 如何根據滑鼠點來判斷線段是否被選擇了,最主要的方法之一是通過點到線段的最小距離來判定的 無論二維還是三維情況下,使用點到直線的距離公式似乎是最直接的選擇 但是不要忘記點到直線公式計算的是點和直線之間的關係,而不是點和線段之間的關係 演算法如...

單詞最近距離

有一篇文章內含多個單詞,現給定兩個單詞,請設計乙個高效演算法,找出文中這兩個單詞的最短距離 即最少相隔的單詞數,也就是兩個單詞在文章中位置的差的絕對值 給定乙個string陣列article,代表所給文章,同時給定文章的單詞數n和待查詢的兩個單詞x和y。請返回兩個單詞的最短距離。保證兩個單詞均在文中...

附近距離計算

之前寫附近資訊的時候需要在資料庫專門制定合適的演算法,在網上也看了各位前輩的一些sql。不過總覺得那些sql執行的結果不是很滿意,精度不是很高,取得的資料與目的有差異。所以自己寫了乙個,今天在這裡分享出來。select abs lng blng 111 abs lat blat 111 abs co...