В настоящее время я пытаюсь создать небольшой инструмент создания привязки Entity-Relationship-Modell для баз данных. Чтобы избежать ошибок, я стараюсь, чтобы прямоугольники не перекрывались с другим прямоугольником.Предотвращение перекрытия из прямоугольников
У меня большая часть моего кода работает, и он обнаруживает почти каждый сговор, но в одном случае я все еще могу пересекать их, и я не знаю, как исправить эту ошибку.
Проблема в том, что она будет выглядеть только на прямоугольнике не на обоих. Но я действительно не знаю, как перехватить этот случай.
Странным мне, что моя Debug линия
System.out.println("still intersects?");
никогда не срабатывает. Может кто-нибудь помочь мне в этой ошибке?
Image to the error in my Colision
Функция срабатывает каждый раз, когда я переместить прямоугольник. Атрибут Selected является булевым, который говорит мне, какой Rectangle я двигаюсь. Затем я проверяю, на какой стороне он перекрывается и возвращается в прежнее положение.
boolean Move(Point point) {
boolean moved = false;
boolean foundone = false;
for (ERMRectangle rectangle : Rectangles) {
if (rectangle.selected) {
foundone = true;
moved = true;
//calculated new Rectangle after Move
Rectangle Temp = new Rectangle();
Temp.x = point.x + rectangle.click.x;
Temp.width = rectangle.position.width;
Temp.height = rectangle.position.height;
Temp.y = point.y + rectangle.click.y;
for (ERMRectangle rectangle2 : Rectangles) {
if (rectangle != rectangle2 && rectangle2.position.intersects(Temp))//prevent overlapping
{
Rectangle intersection = rectangle2.position.intersection(Temp);
if (intersection.height > intersection.width) {
Temp.x = rectangle2.position.x - rectangle2.position.width;
if (intersection.x != rectangle2.position.x) {
Temp.x = rectangle2.position.x + rectangle2.position.width;
}
} else {
Temp.y = rectangle2.position.y - rectangle2.position.height;
if (intersection.y != rectangle2.position.y) {
Temp.y = rectangle2.position.y + rectangle2.position.height;
}
}
}
if(rectangle != rectangle2 && rectangle2.position.intersects(Temp))
{
System.out.println("still intersects?");
}
}
rectangle.position = Temp;
}
}
return moved;
}
ERMRectangle класс:
import java.awt.Rectangle;
public class ERMRectangle {
public Rectangle position;
public boolean selected;
public Point click;
}
Edit: я разрешил его, добавив еще один цикл в моей Methode, который проверяет, если он все еще interselects прямоугольник и возвращает оба х и у cordinnates.
Что такое ERM? (Управление рисками предприятия?) Каковы объекты и методы класса ERMRectangle? Это пользовательский класс, который вы создали, или библиотека, полученная из других источников? Что такое код в 'ERMRectangle.position.intersects()'? – zipzit
его из библиотеки java.awt.Прямоугольник –
@DamianGalli Взгляните на мое решение и дайте мне знать результат. – user3437460