首页 > 解决方案 > 将一个向量分解为 3 个向量

问题描述

我有一个以速度v移动的物体。该对象有一个forwardrightup向量(并且v不需要在前向)。它们都相互垂直。

如何在这 3 个向量上分解v ?从数学上讲,我如何定义abc

v = a * forward + b * right + c * up

例如,如果v与forward非常相似,则a应该具有最大的值。

标签: unity3dvectorgame-physicsphysics

解决方案


随着kmdreko的评论越来越多,请使用Vector3.Dot

Vector3 a =  Vector3.Dot(v, forward);
Vector3 b =  Vector3.Dot(v, right);
Vector3 c =  Vector3.Dot(v, up);

确保forwardrightup已标准化。transform.forward如果您使用,transform.right和,应该已经是这种情况了transform.up

无论如何,如果它们尚未标准化,请使用forward.normalized, right.normalized, andup.normalized代替。


推荐阅读