检查点是否在矩形的给定距离内?

时间:2011-03-30 17:53:53

标签: c geometry

我写了一个布尔值,检查一个点是否在填充矩形的给定距离内

矩形由其左下角及其宽度和高度

定义

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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 );

答案 2 :(得分:-3)

我的方法是这样的。 (这假设y随着你的上升而增加。)

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));
}