Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态和动态圆之间的碰撞响应_Java_2d_Collision Detection_Physics - Fatal编程技术网

Java 静态和动态圆之间的碰撞响应

Java 静态和动态圆之间的碰撞响应,java,2d,collision-detection,physics,Java,2d,Collision Detection,Physics,这是用JavaFX开发的 有两个球-一个动态球和一个静止球。第一个球(动态)从墙壁和任何挡道的物体上反弹 第二个球的目的是成为第一个球的障碍物。因此,无论何时第一个球碰到第二个球,第一个球都会立即弹起。目前,弹跳的准确度很差,我不知道如何修复它。有时第一个球会正确反弹,但通常它会进入第二个球的内部,在那里停留片刻,然后反弹离开。下面的图片是关于这个问题的。 以下是我检测碰撞并作出响应的代码: //Pythagorean Theorem, to detect collision, by e

这是用JavaFX开发的

有两个球-一个动态球和一个静止球。第一个球(动态)从墙壁和任何挡道的物体上反弹

第二个球的目的是成为第一个球的障碍物。因此,无论何时第一个球碰到第二个球,第一个球都会立即弹起。目前,弹跳的准确度很差,我不知道如何修复它。有时第一个球会正确反弹,但通常它会进入第二个球的内部,在那里停留片刻,然后反弹离开。下面的图片是关于这个问题的。

以下是我检测碰撞并作出响应的代码:

   //Pythagorean Theorem, to detect collision, by estimating the distance between the two circles
                double dx = circle.getLayoutX() - circle2.getLayoutX();
                double dy = circle.getLayoutY() - circle2.getLayoutY();
                double radii = circle.getRadius() + circle2.getRadius();

                double distance = (dx * dx) + (dy * dy);
                double minDistance = radii * radii;


// I believe something is missing in the lines below, which is causing the problem.

                if (distance < minDistance) { //If circle1(dynamic) collides with circle2(stationary)

                    c1SpeedX = c1SpeedX * -1; //Inverts direction.

                }
//毕达哥拉斯定理,通过估计两个圆之间的距离来检测碰撞
double dx=circle.getLayoutX()-circle2.getLayoutX();
double dy=circle.getLayoutY()-circle2.getLayoutY();
双半径=圆.getRadius()+圆2.getRadius();
双距离=(dx*dx)+(dy*dy);
双眼距离=半径*半径;
//我相信下面几行中缺少了什么,这就是问题的原因。
if(距离

我花了几个小时在谷歌上,但我找不到答案。我希望有人能提供一个解决方案并解释这个问题。提前谢谢大家

这可能是因为当球的方向一次又一次地反转时,球并不总是有时间离开较大的球

如果距离==距离:

照你现在做的去做

如果距离

球在大的球里面。那么它应该已经反弹了,离我们有点远了。球应该已经移动sqrt(距离MindDistance)远离较大的球。

Mmm

我想你有一些公式错误

例如,
distance
minDistance
应该是

double distance = Math.sqrt((dx * dx) + (dy * dy));
double minDistance = radii;

从逻辑上讲,你不想要
距离吗?我已经尝试了这两种方法,<并且sqrt操作比乘法更昂贵,这就是为什么我使用radii*radii,而不是sqrt。我认为,你应该首先确保你的代码工作正常,然后,您可以优化代码。是不是
c1SpeedX
应该是
c1SpeedX=c1SpeedX*-1
而不是
c1SpeedX=c1SpeedX-1
?因为评论说:“反转方向”。该死,这正是我在代码中使用的方式,我复制了一个旧版本。我会把它放在主柱子上。遗憾的是,这不是问题所在,太糟糕了。需要更多信息才能找到该bug。