gpt4 book ai didi

java - 碰撞检测: Shapes overlap even after using intersects method

转载 作者:行者123 更新时间:2023-12-01 12:39:31 26 4
gpt4 key购买 nike

我正在编写一个代码,其中一个圆圈在一个盒子中随机移动,如果它与其中的任何小矩形碰撞,它会改变其前进方向/反弹回来。我正在使用相交方法来查找它们之间的碰撞。但圆圈有时会与矩形重叠,而不是在接触时弹回。我通过改变方向(180+current_orientation)来弹回球。

我正在尝试解决这个问题,但尚未发现任何成功。我读到相交是通过检查边界矩形的重叠来查找匹配。但是,我该如何解决这个问题。这个问题是由于交叉路口造成的还是我改变方向的方式有任何问题。有什么想法吗?

代码:

private void collisionAvoidanceRobot(int x, int y, int r, double robot_orientation2)
{
boolean collide1=false;
boolean collide2=false;
boolean collide3=false;
boolean collide4=false;
boolean collide5=false;
boolean collide6=false;
r+=5;
Shape collisionrobot=new Ellipse2D.Double(x,y,r,r);
collide1=collisionrobot.intersects(obst1);
if(collide1)
{
robot_orientation=180+robot_orientation;
}
collide2=collisionrobot.intersects(obst2);
if(collide2)
{
robot_orientation=180+robot_orientation;
}
collide3=collisionrobot.intersects(obst3);
if(collide3)
{
robot_orientation=180+robot_orientation;
}
collide4=collisionrobot.intersects(obst4);
if(collide4)
{
robot_orientation=180+robot_orientation;
}
collide5=collisionrobot.intersects(obst5);
if(collide5)
{
robot_orientation=180+robot_orientation;
}
collide6=collisionrobot.intersects(obst6);
if(collide6)
{
robot_orientation=180+robot_orientation;
}

}

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);
}

public void setYPosition_robot(int y)
{
double distance=0;
distance = unit_moved + randomDouble(0, forwardNoise);
robot_y=(int) (y+ Math.cos(Math.toRadians(robot_orientation))*distance);
//System.out.println("Robot_Y:"+robot_y);
}

private void createRobot(Graphics2D g)
{
ArrayList<Integer> robot_list= new ArrayList<Integer>();
robot_list=positionRobot(robot_x,robot_y);
robot_x=robot_list.get(0);
robot_y=robot_list.get(1);
setNoise(0.05,0.05,5.0);
//System.out.println("Robot:"+robot_x+"--"+robot_y+"--"+robot_orientation);
adjustRobotOrientation();
collisionAvoidanceRobot(robot_x,robot_y,robot_radius,robot_orientation);
drawRobot(g,robot_x,robot_y,robot_radius);
}

截图: enter image description here

最佳答案

圆圈是否出现晃动?由于每次迭代都将圆移动随机距离,因此它移动到正方形中的距离可能大于下一次迭代中向相反方向移动的距离,这将导致圆“粘住”。

此外,您的collisionAvoidanceRobot 可以使用for 循环来代替所有这些if

关于java - 碰撞检测: Shapes overlap even after using intersects method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com