2017-09-17 14 views
-1

안녕하세요 저는 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 객체에서 뼈에보다 빠르게 액세스합니다.

참조 용으로 뼈 색인은 다음과 같습니다. 중수골, 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())이 이에 적합합니다.


편집 : 당신은 유니티 엔진의 외부에 있다면 아, 죄송합니다, 대답은 조금 다르다. 이 경우, 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