unity3d - 将一个向量分解为 3 个向量
问题描述
我有一个以速度v移动的物体。该对象有一个forward,right和up向量(并且v不需要在前向)。它们都相互垂直。
如何在这 3 个向量上分解v ?从数学上讲,我如何定义a、b和c:
v = a * forward + b * right + c * up
例如,如果v与forward非常相似,则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
, andup.normalized
代替。
推荐阅读
- django - Django REST Serializer 使用错误的模型进行序列化
- python - python文件写入程序运行时如何更新桌面上的文件大小
- javascript - 使用 d3.js 更新表数据
- c# - C#捕获从不在进程中的函数返回的异常?
- r - 如何设置仅在输入 3 时才显示集合向量的函数?
- javascript - 如果 URI 没有改变,例如在单页应用程序上,如何检测用户是否在新页面上?
- angular - Angular Kendo UI 全局访问
- php - 内连接循环通过
- git - 如何 git rebase 从另一个分支直接到 master 分支?
- javascript - 受控数字比例映射