0
我的屏幕上有幾個矩形形狀,其中一些是旋轉的。現在用戶點擊屏幕的位置(x,y)。是否有標準的算法來檢測哪個矩形被點擊(包含(x,y)座標)?如何檢測點擊了哪個矩形?
這與我有一個問題: Child Views that are translated, scaled or rotated disappear
我的屏幕上有幾個矩形形狀,其中一些是旋轉的。現在用戶點擊屏幕的位置(x,y)。是否有標準的算法來檢測哪個矩形被點擊(包含(x,y)座標)?如何檢測點擊了哪個矩形?
這與我有一個問題: Child Views that are translated, scaled or rotated disappear
如果你搜索「多邊形算法點」,你會發現一堆。對於矩形,我想最簡單的方法是將矩形分成兩個三角形並檢查測試點的barycentric coordinates。下面是一個未經考驗的現成的,袖口嘗試它編寫了起來:
boolean pointInTriangle(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
int denom = (y2-y3)*(x1-x3) + (x3-x2)*(y1-y3);
if(denom==0) return false; // collinear
int num1 = (y2-y3)*(x-x3) + (x3-x2)*(y-y3);
if((denom < 0 && num1 > 0) || (denom > 0 && num1 < 0)) return false;
int num2 = (y3-y1)*(x-x3) + (x1-x3)*(y-y3);
if((denom < 0 && num2 > 0) || (denom > 0 && num2 < 0)) return false;
int num3 = denom - num1 - num2;
if((denom < 0 && num3 > 0) || (denom > 0 && num3 < 0)) return false;
return true;
}
現在,你只需要循環在你的矩形,檢查點是否在任何兩個三角形從而彌補了矩形的。
道歉誰編輯懸而未決。我試圖刪除算法標籤(我不應該這樣,因此將其添加回去)。 – 2011-02-11 23:49:19