首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >花栗鼠动力学计算弹丸运动

花栗鼠动力学计算弹丸运动
EN

Stack Overflow用户
提问于 2010-01-05 19:05:49
回答 2查看 1.9K关注 0票数 0

我需要实现一点人工智能,可以应用到一个刚体,以击中一个目标的冲动。就像大炮发射的炮弹一样。我用花栗鼠动力做物理引擎。

我的数学很糟糕,我的物理也是如此,但是我一直在阅读,在维基百科条目的一些帮助下,我得到了这个

代码语言:javascript
复制
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);

这应该给我一个角度,从这个角度我可以计算出发射弹丸所需要的水平和垂直速度。

然而,它不起作用,这一点也不让我感到惊讶,因为有许多原因。首先是因为我在数学和物理方面很差,但也因为我被其他一些东西弄糊涂了。

  1. 这种方法似乎没有考虑到质量问题。应该这样吗?我会认为这很重要吗?但后来,我在大学里学过艺术,所以我可能错了。
  2. Box2d有PTM_RATIO,但是在花栗鼠中找不到类似的东西,那么我的值如何与花栗鼠的空间坐标相对应呢?
  3. 我知道弧度的不同程度,以及如何在两者之间进行转换。但我该用哪一种呢?我应该把angle1和angle2转换成学位吗?即使我这么做了,它还是不起作用。

总之,有很多关于物理和花栗鼠,我不明白。所以我来这里寻求帮助。

花栗鼠身上有什么东西,我可以用它来解决吗?或者,如果有人自己想办法解决这个问题,我真的很感激你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2010-01-05 19:09:01

首先,我认为水平速度应该是:

代码语言:javascript
复制
float hVel = v * cos(angle2);

而且,你是对的,你需要考虑质量。看起来你是从速度直接推导出力矢量的,这是不正确的。

我从来没有用过花栗鼠,但我猜你不能直接给物体施加速度?你必须施加力,使物体加速到一个特定的速度。力的公式很简单:

代码语言:javascript
复制
F = ma

因为我们把这个弹丸从零速度加速到v,加速度等于v,你需要把这个加速度乘以物体的质量,才能得到所需的正确力。

代码语言:javascript
复制
CGPoint force = cpv(hVel, vVel) * projectileMass;
票数 1
EN

Stack Overflow用户

发布于 2010-02-04 04:22:51

好的。问题是(除了V*cos(角)的错误),你把力和冲动混淆了。

施加一定角度的力并不能使物体的速度达到所需的角度和大小。你必须要么:

  • 通过使用cpBodySetVel(cpBody *body, cpFloat Vel)设置器手动更改速度,将速度设置为所需的速度,或
  • 假设初始速度为0,对物体施加脉冲

我怎么强调都不过分,力和动力是不一样的:

  • 如果你对一个物体施加恒定的力,那么速度就会在时间上不断变化,从0到无穷大的速度。完全不是你想要的。
  • 如果对一个物体施加一次脉冲,速度将立即从v0变为V0+脉冲/质量。

我认为花栗鼠不允许施加冲动。但是你可能可以通过将力除以算法的时间步长来模拟一个脉冲,然后施加一次力,然后将力移除。但最好还是坚持用定位器来设定速度。

如果你真的需要给身体施加一个恒定的力才能到达目标,那么这些方程就不是你在维基百科上找到的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2008409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档