我对谷歌有一点嗤之以鼻的解决方案,但我相信我的术语是错误的,所以请耐心等待。
我正在开发一个简单的游戏,在这个游戏中,人们可以建造简单的宇宙飞船,并且无法在太空船上放置推进器。
我们打电话说我的太空船的质量中心是V。
太空船在任意位置具有任意数量的推进器,其任意推力方向矢量具有任意夹具。
我有一个输入角速度矢量(角度/轴符号)和世界速度(矢量),我希望船“去”。
如何计算船舶加速到所需速度的每个推进器的理想推力?
我目前的解决方案适用于均匀放置的推进器。基本上我所做的只是通过线性速度的推进器正常点所需的速度。而对于角速度,我只是通过推进器位置越过角速度并且通过推进器法线将得到的偏移速度点。当然,如果有任何推进器在质心的另一侧没有镜像,那么它将导致不希望的力。
就像我说的那样,我认为它应该是一个记录良好的问题,但我可能只是在寻找错误的术语。
答案 0 :(得分: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并使用Projected Gauss Seidel方法获得答案。你不需要得到确切的答案,只需要接近一些,因为你将在下一帧中再次解决它的不同值。
我希望有帮助...