gpt4 book ai didi

java - 递归处女通过碰撞检测获得堆栈溢出错误

转载 作者:行者123 更新时间:2023-11-29 05:26:56 24 4
gpt4 key购买 nike

我有一个球类,它具有位置、速度和加速度 vector 作为属性。我的程序实例化了两个球对象,并根据它们之间的引力使它们四处移动。

我的一切都运行良好,但我正在尝试实现一种碰撞检测功能,使球相互弹开。

这是更新速度的方法:

    public Chaney2DVector collisionVelocity(Ball ball2)
{
float x = velocity.x + ((ball2.mass / mass) * (ball2.velocity.x -
ball2.collisionVelocity(this).x));
float y = velocity.y + ((ball2.mass / mass) * (ball2.velocity.y -
ball2.collisionVelocity(this).y));
Chaney2DVector updatedVelocity = new Chaney2DVector(x,y);
velocity = updatedVelocity;
return velocity;

}

我使用了一种称为递归的方法,不是吗?这是我第一次尝试这样做,如果我做错了什么,我深表歉意。

当我的程序运行时,我的更新方法中激活了这个碰撞条件:

    if (this.getDistance(ball2) < (this.radius + ball2.radius))
{
velocity = this.setVelocity(collisionVelocity(ball2).x,
collisionVelocity(ball2).y);
}

我希望这个程序将新的碰撞速度分配给每个球中的速度变量。当我运行程序时,球会很好地相互移动。但是,当球碰撞时它们不会弹起......它们粘在一起处于静止位置并且我收到堆栈溢出错误。我在别处读到这可能与终止条件有关,但我不知道那是什么意思。有什么想法吗??

非常感谢您的帮助!

最佳答案

我写了一个没有终止条件的简单递归示例。这个例子不会有任何结束。 Java会调用该方法,导致java再次调用该方法。一个永无止境的故事:

public class Snippet {

public static void main(String[] args) {
recursionWithoutTerminatingCondition();
}

private static void recursionWithoutTerminatingCondition() {
recursionWithoutTerminatingCondition();
}

}

另一个例子要好得多。 Java 将开始不断地调用该方法,但会减少每次调用的参数值。这将导致一个结局:

public class Snippet {

public static void main(String[] args) {
recursionWithTerminatingCondition(20);
}

private static void recursionWithTerminatingCondition(int numberOfTimes) {
if (numberOfTimes > 0)
recursionWithTerminatingCondition(numberOfTimes - 1);
}

}

针对您的具体情况:

  • 如果您声明一个球的碰撞速度取决于另一个球的碰撞速度,那么 java 无法找到解决方案。

为此类问题构建解决方法的一些常见方法:

  • 如果你声明,一个球的碰撞速度取决于另一个球的碰撞速度上次时间间隔(因此是上次计算的存储值),那么 java 可以计算你的值.
  • 或者,您也可以让 java 计算第一个球的碰撞速度,假设另一个碰撞速度为 0。而不是使用计算出的碰撞速度来计算另一个球的碰撞速度,等等。您可以声明,只要每次重新计算导致的变化小于 0.01(或类似值),java 就可以停止重新计算值。
  • 或者也许有一些其他的公式,它不依赖于其他球的碰撞速度。

可悲的是,我的物理知识太短,无法帮助您计算公式:(

关于java - 递归处女通过碰撞检测获得堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22365981/

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