проверить, находится ли точка в пределах заданного расстояния прямоугольника? - PullRequest
0 голосов
/ 30 марта 2011

я пишу логическое значение, которое проверяет, находится ли точка на заданном расстоянии от заполненного прямоугольника

прямоугольник определяется его нижней левой точкой, шириной и высотой

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Это домашняя работа? Тем не мение. Предполагая, что вы имеете в виду правильное расстояние, например, «расстояние между ближайшей точкой и прямоугольником»:

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 голосов
/ 30 марта 2011

Чтобы найти расстояние между любыми двумя точками, вы можете использовать это:

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 );
0 голосов
/ 30 марта 2011

Мой подход был бы примерно таким.(Это предполагает, что у увеличивается с ростом.)

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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...