Java 机器人在碰撞时跨越边界,而不是在实施粒子滤波时反弹

Java 机器人在碰撞时跨越边界,而不是在实施粒子滤波时反弹,java,swing,collision-detection,Java,Swing,Collision Detection,我已经编写了下面的代码,我正在尝试创建一个粒子过滤器。我面临的问题是,即使在使用交叉方法和其他条件后,机器人有时也会与障碍物重叠。此外,它会在一次又一次的摆动后通过左上角离开边界 我检查碰撞情况,然后如果有碰撞,我将机器人反向移动x 我通过以下方法计算金额x,其中x表示当前位置 public void setXPosition_robot(int x) { double distance=0; distance = unit_moved + randomD

我已经编写了下面的代码,我正在尝试创建一个粒子过滤器。我面临的问题是,即使在使用交叉方法和其他条件后,机器人有时也会与障碍物重叠。此外,它会在一次又一次的摆动后通过左上角离开边界

我检查碰撞情况,然后如果有碰撞,我将机器人反向移动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);
        }

    }
private void adjustmentrobotorientation(图形2d g)
{
int x=机器人_x;
int y=机器人y;

如果((x395))| |((x如果机器人的速度使其在时钟节拍之间通过障碍物,则不会检测到碰撞。您可以

  • 如所引用的
    KineticModel
    中所示,使用更细的记号和更大的对象来消除这种效果

  • 如图所示,预测效果并对其进行补偿


这两个例子都使用了所引用的向量方法。

1)为了更快地获得更好的帮助,请发布一个(最小、完整、可验证的例子)。将其发布在此处,而不是链接上。2)另请参见。如果
adjustRobotOrientation
中的
第一个
如何处理?