Я пытаюсь реализовать алгоритм обнаружения столкновений (метод предельного цикла) в обществе насекомых (тараканов) с одним препятствием (на данный момент), для чего препятствие (красным) окружено кругом влияния (зеленым), здесь я буду вычислять координаты каждой плотвы, как только пересечение будет обнаружено между «плотвой» и «кругом влияния», и сразу же после того, как будет пересечение, плотва останавливается это движение, в моем коде, некоторые тараканы, похоже, перестают двигаться, даже если есть пересечение! И я не понимаю, почему .. Я предоставил основной код и метод пересечения, я не вижу, откуда эта проблема. Я надеюсь, что кто-то может определить, чего я не смог.Насколько точным является метод «пересечения»?
[ App Shot:] https://www.dropbox.com/s/z0rtf8vxe37617u/Colliding%20Roaches.png?dl=0
Так вот основной код:
public void run() {
Roach r = null; //Roach is a class
while(true){
for (int i = 0; i < roachs.size(); i++){
r = (Roach) roachs.get(i);
if (r.toMove)
r.move();
//---------------------- COLLISION AVOIDANCE ----------------------------------------
if(doesIntersects(r, cercleInfluence)){
//System.out.println("Intersection detected.");
r.toMove = false;
}
//-----------------------------------------------------------------------------------
}
repaint();
try{
Thread.sleep(10);
} catch(InterruptedException exc){}
}
}
А вот код метода doesIntersects:
public boolean doesIntersects(Roach r, Ellipse2D.Double sh) {
Area circ1, circ2, shape;
circ1 = new Area(r.getBounds());
circ2 = new Area(sh);
shape=circ1;
shape.intersect(circ2);
return (!shape.isEmpty());// isEmpty => no intersection!
}
Спасибо всем!
EDIT: здесь код метода GetBounds из класса Роуч:
public Ellipse2D.Double getBounds() {
return new Ellipse2D.Double(coordinates.x,
coordinates.y,
10.,
10.
);
}
Привет, Я добавил код метода getBounds, он возвращает Ellipse – Jiru