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