我试图在一个有一个障碍物(现在)的昆虫社区(蟑螂)中实现碰撞检测算法(极限环法),因为这个障碍物(红色)被一圈影响包围(绿色),在这里我将计算每个蟑螂的坐标,一旦在'蟑螂'和'影响圈'之间检测到交集,并且立即一旦有交集,蟑螂就停止运动,在我的代码中,一些即使有任何交点,蟑螂似乎也停止移动!我不明白为什么..我已经提供了主要代码和交集方法,我看不出从哪里来的问题..我希望有人可以发现我不能..“相交”方法有多准确?
[应用射击:] 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!
}
谢谢大家!
编辑: 这里是从类罗奇getBounds方法的代码:
public Ellipse2D.Double getBounds() {
return new Ellipse2D.Double(coordinates.x,
coordinates.y,
10.,
10.
);
}
嗨,我已经添加了getBounds方法的代码,它返回一个椭圆 – Jiru 2014-12-13 12:42:30