2015-06-26 4 views
-1

мы имеем два примера прямоугольника:Найти точки пересечения 2-х прямоугольников

public static Rectangle rect1 = new Rectangle(20, 300, 400, 160); 
public static Rectangle rect2 = new Rectangle(150, 60, 230, 450); 

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

+0

Звучит как проблема обнаружения столкновения, http://stackoverflow.com/questions/335600/collision-detection-between-two-images-in-java – Danielson

+2

Это больше похоже на математику, чем на Java. Если вы понимаете математику, кодирование должно быть простым. (Я бы сказал, что пересечение является областью, а не конкретным набором дискретных точек.) –

+0

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

ответ

2

Вы можете получить точки пересечения используя встроенные методы intersection

Rectangle rect1 = new Rectangle(20, 300, 400, 160); 
    Rectangle rect2 = new Rectangle(150, 60, 230, 450); 

    Rectangle intersection = rect1.intersection(rect2); 
    System.out.println(intersection); 
0

Вы должны сделать это:

public Area getRectanglesColisionArea(Rectangle rect1, Rectangle rect2){ 
    Area shape1 = new Area(rect1); 
    Area shape2 = new Area(rect2); 

    return shape1.intersect(shape2); 
} 

Возвращение формы области является

Для вызова функции просто:

Rectangle rect1 = new Rectangle(20, 300, 400, 160); 
    Rectangle rect2 = new Rectangle(150, 60, 230, 450); 
    Area result = getRectanglesColisionArea(rect1,rect2); 

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

Rectangle inters = result.getBounds(); 
    Double x1=inters.getX(); 
    Double y1=inters.getY(); 
    Double x2=inters.getX()+inters.getWidth(); 
    Double y2=inters.getY()+inters.getHeight(); 
+0

это не возвращает точки столкновения – tucuxi

0

Для двух прямоугольников было бы четыре отверстия для пересечения,

  1. Один находится внутри другого или они полностью не пересекаются - нет точки пересечения.
  2. Они делят одну точку - 1 точку пересечения.
  3. Они пересекаются ровно в четыре точки.
  4. Они разделяют часть одной или нескольких сторон - бесконечные точки пересечения.

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

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