计算推力,针对质量周围任意位置的任意推进器的偏移推进器位置。

3
我在谷歌上搜索了一下解决方案,但我认为我的术语不正确,因此请耐心等待。
我正在开发一个简单的游戏,人们可以建造简单的太空飞船,并随意放置推进器。
假设我的太空飞船的重心是V。
该太空飞船具有任意数量的推进器,在任意位置具有任意推力方向向量和任意夹具。
我有一个输入角速度向量(角/轴表示法)和世界速度(向量),希望飞船以所需速度“前进”。
如何计算每个推进器的理想推力,使飞船加速到所需速度?
对于均匀放置的推进器,我的当前解决方案效果很好。基本上,我只需将期望速度点乘推进器法线即可获得线性速度。对于角速度,我只需通过推进器位置叉乘角速度,然后将结果偏移速度点乘推进器法线。当然,如果有任何推进器在重心的对称面上没有镜像,那么它将产生不良力。
就像我说的,我认为这应该是一个相当详细的问题,但我可能只是在寻找错误的术语。
1个回答

2

我认为你可以将这个问题分解成两部分。第一部分是根据当前和期望速度来确定每帧的加速度。一个简单的规则是:

acceleration = k * (desired velocity - current velocity)

其中k是一个常数,决定了系统的“响应性”程度。换句话说,如果你速度太慢,就加速(正加速度),如果你速度太快,就减速(负加速度)。

第二部分有点难以想象;你必须找出哪种推进器的组合可以给你所需的加速度。我们称c_i为每个推进器的推力量。你需要解决一组耦合方程:

sum( c_i * thrust_i ) = mass * linear acceleration
sum( c_i * thrust_i X position_i) = moment of interia * angular acceleration

其中X是叉积。我的物理知识可能有点不准确,但我认为这是对的。

这是一个由6个方程(在3D中)和N个未知数组成的方程,其中N是推进器的数量,但您还需要满足c_i>0的附加约束条件(假设推进器无法向后推)。

这是一个棘手的问题,但您应该能够将其设置为LCP,并使用投影高斯赛德尔方法得到答案。您不需要获得精确答案,只需获得接近答案即可,因为您将在下一帧中为稍微不同的值再次解决它。

希望这可以帮助...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接