2014-07-07 60 views
1

我有4個NSPoints,它們是矩形找到另一個NSPoint最接近哪個NSPoint的最佳方法是什麼?

現在我有另一個NSPoint,這是4個角,其中鼠標下降(mousedown_nsp)。

對於mousedown_nsp,我找到最接近的NSPoint(4個矩形角NSPoint中的哪一個)的最佳方法是什麼?

我只是想做一個比較,找到mousedown_nsp和其他4個NSPoints之間的距離,然後選擇最小的距離,但我覺得有一個更好的方法。

任何想法?

在此先感謝!

+2

爲了找到一個最低限度,你必須以比較所有其它的值。沒有辦法繞過它。 (如果這是你的口味,你可以嘗試將循環重構爲功能樣式的東西,但是你不可能比'O(n)'更快地做到這一點。) –

+3

10想想這樣 - 把你的矩形分開分成四個相等的象限。你的觀點所在的四個象限中哪一個最接近那個角落。無需計算實際距離。如果矩形根本沒有旋轉,這很簡單。 – rmaddy

+0

@rmaddy,所以我應該在4個角上創建4個更小的矩形,並找出鼠標所在的矩形?有沒有我可以調用的方法來判斷一個點是否在矩形內? –

回答

2

也許這樣的事情(假定非旋轉矩形):

NSPoint tl = ... // top-left corner 
NSPoint tr = ... // top-right corner 
NSPoint bl = ... // bottom-left corner 
NSPoint br = ... // bottom-right corner 
NSPoint pt = ... // the point 

NSPoint center = NSMakePoint((tl.x + tr.x)/2.0, (tl.y + bl.y)/2.0); 
NSPoint closest; 
if (pt.x < center.x) { 
    if (pt.y < center.y) { 
     closest = tl; // point is in upper-left quadrant 
    } else { 
     closest = bl; // point is in lower-left quadrant 
    } 
} else { 
    if (pt.y < center.y) { 
     closest = tr; // point is in upper-right quadrant 
    } else { 
     closest = br; // point is in lower-right quadrant 
    } 
} 
相關問題