我有两个方向,我正在尝试计算特定轴上的角度。导出方向的对象不是一个静态对象,所以我很难绕过数学计算出我需要做的事情。
仅供参考,我有我用来计算方向的起点和终点。
这是一张显示我要找的内容的图表:
上图是从上到下的统一视图,它显示了我想要的角度。
从上面的图像可以看出问题,即方向不在同一高度,所以我不能使用vector3.angle函数,因为它不能给我正确的角度值
本质上我想知道我需要将红线向左旋转多少(顶视图),以便它与蓝色(顶视图)对齐。
我需要这个的原因是因为我试图找到一种方法从我的飞跃运动传感器获得手指的左右角度。
这是我的另一个问题的通用版本: Leap Motion - Angle of proximal bone to metacarpal (side to side movement)
如果您需要,它将提供有关问题的更具体信息,并且它具有更具体的屏幕截图。
**更新: 在重新阅读我的问题之后,我可以看到它并不是特别清楚所以我希望这里能让它更清晰。我试图从跳跃运动跟踪数据计算手指的角度。具体地说,手指相对于掌骨的角度(骨头是手背)。一个简单的方法来展示我的意思是你将食指左右移动(即朝向拇指,然后远离拇指)。
蓝线跟随掌骨,手指在静止位置排列。我想要计算的是蓝线和红线之间的角度(用绿线标记)。我无法使用Vector3.Angle,因为此值也会考虑手指的弯曲。我需要一些“扁平化”#39;手指方向向外,因此基本上忽略了弯曲,只是看着左右角度。第二张图有望显示我的意思。
在此图中: 蓝线代表手指的实际方向(取自近端骨关节至第一关节) 绿线代表掌骨方向(比较的方向) 红线表示我想要转换的内容。蓝线,同时保持它的左右角度(如第一手图所示)。
值得一提的是,我不能一直看x和z轴,因为这只手会在旋转时移动。
我希望这有助于澄清事情并真正感谢到目前为止所获得的帮助。
答案 0 :(得分:0)
如果我正确理解您的问题,您需要将两个向量投影到一个平面上。这些矢量当前可能不在那个平面上(你的"弯曲的手指"问题)因此你需要"投射"它们在飞机上(想象一棵树将阴影投射到地面上;树是矢量,阴影是投影到地面上的#34;
幸运的是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就是垂直的。但如果它是参考其他一些变换,你需要先定义它。