找到大小使得它们在某个方向上产生最大合成矢量?

时间:2015-07-29 14:46:23

标签: c# unity3d

我正在开发一款2d太空射击游戏,船上有助推器。 我想确定每个助推器需要施加多大的力才能使我的船以最大的力量移动到它想去的方向。

该船可能有任意数量的助推器,但可能是2-10的小数字。 助推器的旋转是已知的,但我无法确定它们的大小。 幅度可以从0(最小)到5(最大)。

我达到了这个等式的地步:

directionToGo = ForceB1*B1Direction + ForceB2*B2Direction

但是现在我得到了更多的助推器,我只是在思考,可以找到我想要的东西,我必须在每个方向的最小/中/最大力量中蛮力找到我不知道的其他人。 / p>

那我该怎么做呢?

http://i.imgur.com/2PVlDmx.png

因为我没有想出答案而不得不解决。

1 个答案:

答案 0 :(得分:1)

这听起来像是约束最大化问题。您希望沿着某个矢量最大化力,同时沿垂直矢量不施加任何力。

如果你的推进器都没有指向质心,你需要的另一个约束是施加零扭矩。这可以确保船舶不受力的不平衡而旋转。然而,有些游戏为了简单起见忽略了这一点,并假设推进器从不施加扭矩。

需要注意的一点是,当推进器的方向发生变化时,您只需要进行优化:在游戏过程中,您可以应用推力比率来添加力矢量。 (注意,移动"对角线"需要另一种解决方案:如果你只是试图向前+侧向施加,你将从推进器获得> 100%的力量,导致不平衡。)

这是一种解决方法 - 可能有一个我不知道的更简单的解决方案。如果您可以进一步限制您的问题,那么更有可能采用更简单的方法。