您好我尝试了很多不同的方法来获得Leap Motion中的弯曲角度。但我无法获得真正的价值观。我用这种方法进行阅读。提前致谢。
Bone bone1 = finger.Bone(Bone.BoneType.TYPE_INTERMEDIATE);
Bone bone2 = finger.Bone(Bone.BoneType.TYPE_PROXIMAL);
double angle = 180 - ((bone1.Direction.AngleTo(bone2.Direction) / Math.PI) * 180) * 2;
答案 0 :(得分:0)
在这个例子中,我将使用数组访问器作为从Finger对象访问骨骼的更快捷方式。
作为参考,骨指数为:0 =掌骨,1 =近端,2 =中间,3 =远端。您可以通过查看BoneType的定义来验证这一点。
(小心,拇指比其他手指少一个骨头。)
Vector3 bone0Dir = finger.bones[0].Direction.ToVector3();
Vector3 bone1Dir = finger.bones[1].Direction.ToVector3();
float angle = Vector3.Angle(bone0Dir, bone1Dir);
此示例检索掌骨与finger
对象的近端骨骼之间的角度。
请注意,Vector3.Angle返回两个骨骼之间的无符号角度;如果您需要签名角度,可以使用SignedAngle
功能。你需要传递一个参考轴; Vector3.Cross(hand.PalmarAxis(), hand.DistalAxis())
适合此。
编辑:啊,道歉,如果您不在Unity引擎之外,答案会有所不同。在这种情况下,Leap.Vector.AngleTo就足够了,但是有一种更简单的方法可以将弧度转换为度数:
Vector bone0Dir = finger.bones[0].Direction;
Vector bone1Dir = finger.bones[1].Direction;
float angle = bone0Dir.AngleTo(bone1Dir) * Vector.RAD_TO_DEG;
同样,这将返回无符号角度,但手指通常不会向后弯曲,因此这应该足以满足您的使用需求。您也可以使用Math.Asin((bone0Dir.Cross(bone1Dir).Magnitude)) * RAD_TO_DEG
获得(右手)签名角度。