我最近开始尝试使用安卓进行一些操作,并且决定尝试制作一个基本的物理模拟器,但我遇到了一个小问题。
我有我的球对象,每个球都有一个速度向量,我将其移动的方法是在每次滴答声中将该向量添加到球的位置上。这种方法很有效,直到我发现这种方法存在问题。
当我尝试将重力应用于球时,我注意到当两个球靠近时,其中一个球会被弹射出去。
经过一些调试,我找到了这种情况发生的原因。以下是我计算重力和加速度的示例:
这是问题的核心 - 当球们靠得很近时,重力变得非常强(应该如此),因此速度也变得非常高,但由于我每个周期都添加向量到位置,并且向量的值非常高,其中一个球被弹出了。
那么这就带来了我的问题 - 除了添加向量之外,是否有更好的移动对象的方法?另外,是否有更好的处理重力的方法?
感谢您能提供的任何帮助。
我有我的球对象,每个球都有一个速度向量,我将其移动的方法是在每次滴答声中将该向量添加到球的位置上。这种方法很有效,直到我发现这种方法存在问题。
当我尝试将重力应用于球时,我注意到当两个球靠近时,其中一个球会被弹射出去。
经过一些调试,我找到了这种情况发生的原因。以下是我计算重力和加速度的示例:
//for each ball that isn't this ball
for (Ball ball : Ball.balls)
if (ball != this) {
double m1 = this.getMass();
double m2 = ball.getMass();
double distance = this.getLocation().distance(ball.getLocation());
double Fg = 6.674*((m1*m2)/(distance * distance));
Vector direction = ball.getLocation().subtract(this.getLocation()).toVector();
Vector gravity = direction.normalize().multiply(Fg / mass);
this.setVeloctity(this.getVelocity().add(gravity));
}
这是问题的核心 - 当球们靠得很近时,重力变得非常强(应该如此),因此速度也变得非常高,但由于我每个周期都添加向量到位置,并且向量的值非常高,其中一个球被弹出了。
那么这就带来了我的问题 - 除了添加向量之外,是否有更好的移动对象的方法?另外,是否有更好的处理重力的方法?
感谢您能提供的任何帮助。