Unity3D在特定轴上的矢量/方向之间的角度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D在特定轴上的矢量/方向之间的角度相关的知识,希望对你有一定的参考价值。

我有两个方向,我试图计算特定轴上的角度。导出方向的对象不是静态对象,所以我很难绕过数学计算出我需要做的事情。

仅供参考,我有我用来计算方向的起点和终点。

这是一个显示我正在寻找的图表:

上图是从上到下的统一视图,它显示了我想要的角度。

从上面的图像可以看出问题,即方向不在同一高度,所以我不能使用vector3.angle函数,因为它不会给我正确的角度值。

从本质上讲,我想知道我需要将红线向左旋转多少(顶视图),以便它与蓝色(顶视图)对齐。

我需要这个的原因是因为我试图找到一种方法从我的飞跃运动传感器获得手指的左右角度。

这是我的另一个问题的通用版本:Leap Motion - Angle of proximal bone to metacarpal (side to side movement)

如果您需要它,它将提供有关问题的更具体信息,并且它具有更具体的屏幕截图。

**更新:重新阅读我的问题后,我可以看到它不是特别清楚,所以在这里我希望能让它更清晰。我试图从跳跃运动跟踪数据计算手指的角度。具体地说,手指相对于掌骨的角度(骨头是手背)。一个简单的方法来展示我的意思是你将食指左右移动(即朝向你的拇指,然后远离你的拇指)。

我在下面放了两张图,希望能说明这一点。 enter image description here

蓝线跟随掌骨,您的手指将在静止位置排列。我想要计算的是蓝线和红线之间的角度(用绿线标记)。我无法使用Vector3.Angle,因为此值也会考虑手指的弯曲。我需要将手指方向“扁平化”,因此基本上忽略了弯曲,只是看着左右角度。第二张图有望显示我的意思。

enter image description here

在此图中:蓝线代表手指的实际方向(取自近端骨关节至第一关节)绿线代表掌骨方向(要比较的方向)红线代表我想要的将蓝线“转换”为,同时保持其左右角度(如第一手图所示)。

值得一提的是,我不能只看到x和z轴,因为这只手将在旋转时移动。

我希望这有助于澄清事情并真正感谢到目前为止所获得的帮助。

答案

如果我正确理解您的问题,您需要将两个向量投影到一个平面上。这些矢量当前可能不在那个平面上(你的“弯曲的手指”问题)因此你需要将它们“投射”到平面上(想象一棵树将阴影投射到地面上;树是矢量而阴影是投射到地面的“平面”上)。

幸运的是,Unity3D提供了一种投影方法(尽管数学并不那么难)。 Vector3.ProjectOnPlane https://docs.unity3d.com/ScriptReference/Vector3.ProjectOnPlane.html

Vector3 a = ...;
Vector3 b = ...;
Vector3 planeNormal = ...;
Vector3 projectionA = Vector3.ProjectOnPlane(a, planeNormal);
Vector3 projectionB = Vector3.ProjectOnPlane(b, planeNormal);
float angle = Vector3.Angle(projectionA, projectionB);

您的问题描述中不清楚的是您需要投射到哪个平面?水平面?如果是这样,planeNormal就是垂直的。但如果它是参考其他一些变换,你需要先定义它。

以上是关于Unity3D在特定轴上的矢量/方向之间的角度的主要内容,如果未能解决你的问题,请参考以下文章

如何旋转对象沿着矢量Unity3D指向

检测加速度计在 y 轴上的运动方向

设备保持静止时垂直轴上的 Android 设备角度

THREE.js如何实现在x,y,z轴上的拖拽

三 JS / 动画在其 Y 轴上的网格旋转到面方向

热图中 x 轴上的对角线标签方向