【发布时间】:2014-08-14 03:04:08
【问题描述】:
我编写了以下代码,我试图在其中创建粒子过滤器。我面临的问题是,即使在使用相交方法和其他条件后,机器人有时也会与障碍物重叠。而且,它随着拐角一次次晃动,从左上角出界。
我检查碰撞,然后如果似乎有碰撞,我将机器人反向移动 x 量。
我通过以下方法计算数量x,其中x表示当前位置。
public void setXPosition_robot(int x)
{
double distance=0;
distance = unit_moved + randomDouble(0, forwardNoise);
robot_x= (int) (x + Math.sin(Math.toRadians(robot_orientation))*distance);
//System.out.println("Robot_X:"+robot_x);
}
我正在使用以下代码来检查冲突:
private void adjustRobotOrientation(Graphics2D g)
{
int x=robot_x;
int y=robot_y;
if((x<0)&&(y<0))
{
robot_orientation=robot_orientation+randomDouble(160, 180);
}
if((x>620)||((y>395))||((x<1))||((y<1)))
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
}
private void collisionAvoidanceRobot(int x, int y, int r)
{
boolean collide1=false;
boolean collide2=false;
boolean collide3=false;
boolean collide4=false;
boolean collide5=false;
boolean collide6=false;
x+=unit_moved;
y+=unit_moved;
Shape collisionrobot=new Ellipse2D.Double(x,y,r,r);
collide1=collisionrobot.intersects(obst1);
if(collide1)
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
collide2=collisionrobot.intersects(obst2);
if(collide2)
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
collide3=collisionrobot.intersects(obst3);
if(collide3)
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
collide4=collisionrobot.intersects(obst4);
if(collide4)
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
collide5=collisionrobot.intersects(obst5);
if(collide5)
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
collide6=collisionrobot.intersects(obst6);
if(collide6)
{
robot_orientation=robot_orientation+randomDouble(160, 220);
}
}
如果你想看,完整的代码在两个文件中: 1.http://pastebin.com/ZYfSzptc(主班) 2.http://pastebin.com/hqTTyq5n
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发布MCVE(最小、完整、可验证的示例)。在此处发布,而不是在链接中发布。 2)另见Collision detection with complex shapes。
-
第一个
if和adjustRobotOrientation有什么关系?
标签: java swing collision-detection