我有一个物体以速度v移动。对象具有向前、向右和向上的向量(v不需要在正向方向(。它们都是相互垂直的。
如何在这 3 个向量上分解v?在数学上,我如何定义a、b和c,以便:
v = a * forward + b * right + c * up
例如,如果v与前向非常相似,则a应该具有最大值。
正如 kmdreko 的评论所得到的那样,请使用Vector3.Dot
:
Vector3 a = Vector3.Dot(v, forward);
Vector3 b = Vector3.Dot(v, right);
Vector3 c = Vector3.Dot(v, up);
确保forward
、right
和up
已规范化。如果您使用的是transform.forward
、transform.right
和transform.up
,应该已经是这种情况了。
无论如何,如果它们尚未规范化,请改用forward.normalized
、right.normalized
和up.normalized
。