我寫了一個基於win32 api的GUI應用程序,它使用GDI +功能,如DrawCurve()和DrawLine()。如何檢測多圖片邊緣的點擊?
這個應用程序繪製代表多圖的線條和曲線。
邊緣的數據結構只是一個5 int的結構。 (x1,y1,x2,y2和id)
如果兩個頂點之間只有一條邊,則使用DrawLine()繪製直線段。 如果存在多條邊,則使用DrawCurve()繪製曲線 - 這裏,I 傳播圍繞兩個頂點中點的直線邊緣,使它們成爲曲線。使用法線方程計算距離它一些單位像素的點。如果添加更多邊緣,則選擇距中點兩個單位像素的像素,然後選擇3個單位像素,依此類推。
現在我有兩個關於檢測邊緣點擊的問題。
在尋找直線邊緣時,爲了最小化搜索時間,我該怎麼辦?
檢查點擊的像素是否在線段上很簡單,但如果邊緣的數量很大,比較所有邊緣效率會很低。看起來有可能在O(log n)中完成,其中n是邊的數量。
編輯:在這一點上,邊緣(類邊緣)存儲在std :: map,將邊緣id(int)的 映射到Edge對象,我正在考慮聲明另一個將像素映射到邊緣id的容器。
我正在考慮使用二叉搜索樹,但什麼可以是關鍵?或者我應該只使用一個2D像素陣列?我可以得到DrawCurve()使用的點的數組嗎?如果這是不可能的,那麼我應該重新計算基數樣條線,得到點數組,並檢查用戶點擊的點是否與該數組中的任何點相匹配。
僅用於檢測邊緣被單擊的目的,還是需要根據點擊邊緣的位置來檢索值? – K3N
只要檢測到哪個邊緣被點擊是好的。然後將檢索邊緣的id,並查找std :: map。 –