2010-12-04 5 views
-1

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

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

getX(); 
getY(); 
getWidth(); 
getHeight(); 
+0

Дубликат этого вопроса: http://stackoverflow.com/questions/306316/determine- if-two-rectangles-overlap-each-other – 2010-12-04 16:58:40

ответ

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^