2017-09-17 14 views
-1

こんにちは私は、Leap Motionで曲げ角度を取得するためにさまざまな方法を試しました。しかし、私は真の価値を得ることができませんでした。私はこの方法を読んだ。前もって感謝します。Leap Motion Get Finger Bending(C#)

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

この例では、Fingerオブジェクトからボーンに素早くアクセスするために配列アクセサーを使用します。

参考までに、骨指数は、0 =中手骨、1 =近位、2 =中間、3 =遠位である。 BoneTypeの定義を調べることでこれを検証できます。

(慎重に、親指が他の指よりも1つの少ない骨を有する。)

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())がこれに適しています。


EDIT:あなたが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を使用して(右手)符号付き角度を取得することもできます。

+0

Leap.Vector関数を使用し、標準の.NET数学ライブラリの関数を使用して、Unityエンジンの外部の状況に対する答えを追加しました。 – omonobic

関連する問題