我需要实现一点人工智能,可以应用到一个刚体,以击中一个目标的冲动。就像大炮发射的炮弹一样。我用花栗鼠动力做物理引擎。
我的数学很糟糕,我的物理也是如此,但是我一直在阅读,在维基百科条目的一些帮助下,我得到了这个
float x = target.x = launchPos.x;
float y = target.y = launchPos.y;
float g = 9.8;
float v = 100;
float angle1, angle2;
float tmp = pow(v, 4) - g * (g * pow(x, 2) + 2 * y * pow(v, 2));
if(tmp < 0){
NSLog(@"No Firing Solution");
}else{
angle1 = atan2(pow(v, 2) + sqrt(tmp), g * x);
angle2 = atan2(pow(v, 2) - sqrt(tmp), g * x);
}
// Split the velocities
float vVel = v * sin(angle2);
//NSLog(@"Vertical Velocity: %f", vVel);
float hVel = v / cos(angle2);
//NSLog(@"Horizontal Velocity: %f", hVel);
CGPoint force = cpv(hVel, vVel);这应该给我一个角度,从这个角度我可以计算出发射弹丸所需要的水平和垂直速度。
然而,它不起作用,这一点也不让我感到惊讶,因为有许多原因。首先是因为我在数学和物理方面很差,但也因为我被其他一些东西弄糊涂了。
总之,有很多关于物理和花栗鼠,我不明白。所以我来这里寻求帮助。
花栗鼠身上有什么东西,我可以用它来解决吗?或者,如果有人自己想办法解决这个问题,我真的很感激你的帮助。
发布于 2010-01-05 19:09:01
首先,我认为水平速度应该是:
float hVel = v * cos(angle2);而且,你是对的,你需要考虑质量。看起来你是从速度直接推导出力矢量的,这是不正确的。
我从来没有用过花栗鼠,但我猜你不能直接给物体施加速度?你必须施加力,使物体加速到一个特定的速度。力的公式很简单:
F = ma因为我们把这个弹丸从零速度加速到v,加速度等于v,你需要把这个加速度乘以物体的质量,才能得到所需的正确力。
CGPoint force = cpv(hVel, vVel) * projectileMass;发布于 2010-02-04 04:22:51
好的。问题是(除了V*cos(角)的错误),你把力和冲动混淆了。
施加一定角度的力并不能使物体的速度达到所需的角度和大小。你必须要么:
cpBodySetVel(cpBody *body, cpFloat Vel)设置器手动更改速度,将速度设置为所需的速度,或我怎么强调都不过分,力和动力是不一样的:
我认为花栗鼠不允许施加冲动。但是你可能可以通过将力除以算法的时间步长来模拟一个脉冲,然后施加一次力,然后将力移除。但最好还是坚持用定位器来设定速度。
如果你真的需要给身体施加一个恒定的力才能到达目标,那么这些方程就不是你在维基百科上找到的。
https://stackoverflow.com/questions/2008409
复制相似问题