2011-03-30 83 views
-1

我寫的檢查,看看是否一個點是填充的矩形檢查點是否在矩形的給定距離內?

的給定距離內的矩形由其左下點定義並且其寬度和高度

+0

是的,你可以(如果你正確定義「距離」)。你在阻擋什麼?到目前爲止,你有什麼? – Mat 2011-03-30 17:57:48

回答

-3

我的做法是這樣的。 (因爲你去了這個假設Ÿ增加。)

BOOL IsWithinDistance(POINT pt, RECT rc, int distance) 
{ 
    return (pt.x > (rc.left - distance) && 
     pt.x < (rc.right + rc.width + distance) && 
     pt.y > (rc.bottom - distance) && 
     pt.y < (rc.bottom + rc.height + distance)); 
} 
+0

你能解釋這個請 – Technupe 2011-03-30 18:19:46

+0

@ user570098這段代碼似乎錯了(不計算距角正確的距離 - 不是歐幾里德距離,反正) – anatolyg 2011-03-30 18:22:46

+0

代碼錯誤,距離計算不正確。請參閱我的答案,瞭解適當的距離計算。舉個例子:如果你的盒子的邊界之一是(0,0)和距離== 5,那麼(-4,0)和(-4,-4)都被認爲是相同的距離。 – EboMike 2011-03-30 18:57:28

2

這是家庭作業的布爾?無論如何。 假設你的意思是適當的距離,如「最近點之間的距離,以矩形」:

int IsWithinDistance(int pointX, int pointY, int rectX, int rectY, int rectWidth, int rectHeight, int distanceThreshold) 
{ 
    int x2 = rectX + rectWidth; 
    int y2 = rectY + rectHeight; 
    int xDiff = (pointX < rectX) ? rectX - pointX : pointX - x2; 
    int yDiff = (pointY < rectY) ? rectY - pointY : pointY - y2; 
    int distance2; 

    xDiff = (xDiff < 0) ? 0 : xDiff; 
    yDiff = (yDiff < 0) ? 0 : yDiff; 

    distance2 = xDiff * xDiff + yDiff * yDiff; 

    return distance2 < (distanceThreshold * distanceThreshold); 
} 
+0

沒有它的不作業,我的意思是在任何給定點的距離內的矩形 – Technupe 2011-03-30 18:03:02

+0

+1非常好的解決方案 – chepukha 2012-02-22 19:04:05

0

找到兩個點之間的距離,您可以使用此:

CGFloat distanceBetweenPoints(CGPoint pt1, CGPoint pt2) 
{  
    CGFloat dx = pt2.x - pt1.x;  
    CGFloat dy = pt2.y - pt1.y;  
    return sqrt(dx*dx + dy*dy); 
} 

您可以使用它來找到中心的距離如果您喜歡,可以選擇矩形或其他點。

CGFloat distanceToRect = distanceBetweenPoints(aPoint, aRect.center); 
相關問題