我有2个传感器:在上臂和手上,每个都给我一个四元数(或欧拉角)在全球3d空间中的位置,你有什么想法,我怎样才能找到前臂位置? 例如,我需要此值来解决问题: 当我把手放在桌子上并向上移动我的上臂(如机翼)时,程序认为我将手与上臂一起向上移动。
答案 0 :(得分:1)
您描述的情况听起来像inverse kinematics问题。实际上,这是根据其自由端的期望位置(末端执行器)。
您可能希望查看Unity's own inverse kinematics实施,而不是自己解决这个困难的数学问题。但是,如果您无法将游戏中的对象调整为Animator
,则可能无法实现这一点。
您也可以自己编写解决方案。创建这个问题的通用解决方案在数学上非常复杂 - 但是您可以获得一些额外的信息:手和上臂的实际角度和位置。如果你指定前臂长度或上臂长度(你甚至可以用数学方法得出这个,直到你!),那么一些轻的线性代数应该足以满足你的目的(假设你的传感器读数是正确的)。
如果指定前臂长度FL,则需要沿着上臂的方向向量找到交叉点(肘部),该向量是距离手的距离FL。或者,如果指定上臂长度UL,则只需将UL / 2向下移动到上臂的方向向量(因为位置位于上臂的中间)以获得肘部位置。
在这两种情况下,一旦你有肘部位置,获得前臂位置和角度是微不足道的。这是一个可视化问题的图表: