Алгоритм пересечения - PullRequest
       20

Алгоритм пересечения

0 голосов
/ 04 декабря 2010

У меня есть два объекта в проекте CSharp, который представляет прямоугольники. Теперь я хочу вычислить, пересекает ли один объект другой. Объекты не могут вращаться.

У меня есть следующие методы:

getX();
getY();
getWidth();
getHeight();

1 Ответ

2 голосов
/ 04 декабря 2010

Хотя это технически является дубликатом этого другого вопроса , я бы предложил более элегантное решение, чем то, что было там опубликовано.

То, как я на него посмотрю, будетперспектива ограничительной рамки.Если ограничивающий прямоугольник короче, чем сумма высот И тощий, чем сумма ширин, они должны пересекаться:

// assume we have a class with a constructor like so...
class Rect
{
    ...
    void Rect(int top, int left, int bottom, int right) { ... }
    ...
}

...

private Rect GetBoundingRect(Rect r1, Rect r2)
{
    int left = min(r1.getX(), r2.getX());
    int right = max(r1.getX()+r1.getWidth(), r2.getX()+r2.getWidth());
    int top = min(r1.getY(), r2.getY());
    int bottom = max(r1.getY()+r1.getHeight(), r2.getY()+r2.getHeight());
    return new Rect( top, left, bottom, right );
}

private bool CheckIfIntersect(Rect r1, Rect r2)
{
    Rect bound = GetBoundingRect(r1,r2);
    return (bound.getWidth() < r1.getWidth() + r2.getWidth()) &&
           (bound.getHeight() < r1.getHeight() + r2.getHeight());
}
...