我已经在google周围找到了一些解决方案,但我相信我的术语是错误的,所以请耐心听我说。
我正在开发一个简单的游戏,人们可以建造简单的宇宙飞船,并随意地在宇宙飞船上放置推进器。
假设我的太空船的质心是V。
太空船在任意位置有任意数量的推进器,具有任意的推力方向矢量和任意的夹具。
我有一个输入角速度矢量(角度/轴符号)和世界速度(矢量),我希望船“走”在那里。
我如何计算每个推进器的理想推力,使船加速到期望的速度?
我目前的解决方案适用于均匀放置的推进器。本质上,我所做的就是,通过推进器,点出期望的速度,线速度的法线。而对于角速度,我只是通过推进器的位置来交叉角速度,并通过推进器的法线来点产生的偏移速度。当然,如果有任何推进器在质心的另一侧没有镜像,就会产生不想要的力。
就像我说的,我认为这应该是一个有很好记录的问题,但我可能只是在寻找错误的术语。
发布于 2012-01-29 00:33:06
我想你可以把它分成两部分。第一个是根据你当前和期望的速度来决定每一帧的加速度。为此,有一个简单的规则
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,并使用投影高斯赛德尔方法获得答案。你不需要得到确切的答案,只需要接近的答案,因为你将在下一帧中为略有不同的值再次求解。
我希望这会有帮助..。
https://stackoverflow.com/questions/9046176
复制相似问题