2015-04-23 1 views
1

К сожалению об этом, но мне нужно немного конформацию об этой функции и вычислениеKinect Joint Angle Расчет

Я в настоящее время эти векторы:

Vector3D ElbowLeft = new Vector3D(body.Joints[JointType.ElbowLeft].Position.X, body.Joints[JointType.ElbowLeft].Position.Y, body.Joints[JointType.ElbowLeft].Position.Z); 
    Vector3D WristLeft = new Vector3D(body.Joints[JointType.WristLeft].Position.X, body.Joints[JointType.WristLeft].Position.Y, body.Joints[JointType.WristLeft].Position.Z); 
    Vector3D ShoulderLeft = new Vector3D(body.Joints[JointType.ShoulderLeft].Position.X, body.Joints[JointType.ShoulderLeft].Position.Y, body.Joints[JointType.ShoulderLeft].Position.Z); 

    Vector3D Head = new Vector3D(body.Joints[JointType.Head].Position.X, body.Joints[JointType.Head].Position.Y, body.Joints[JointType.Head].Position.Z); 
    Vector3D Neck = new Vector3D(body.Joints[JointType.Neck].Position.X, body.Joints[JointType.Neck].Position.Y, body.Joints[JointType.Neck].Position.Z); 
    Vector3D SpineShoulder = new Vector3D(body.Joints[JointType.SpineShoulder].Position.X, body.Joints[JointType.SpineShoulder].Position.Y, body.Joints[JointType.SpineShoulder].Position.Z); 

Я расчетливый угол между двумя векторами, используя эту функцию

public double AngleBetweenTwoVectors(Vector3D vectorA, Vector3D vectorB) 
{ 
    double dotProduct = 0.0; 
    vectorA.Normalize(); 
    vectorB.Normalize(); 
    dotProduct = Vector3D.DotProduct(vectorA, vectorB); 

    return (double)Math.Acos(dotProduct)/Math.PI * 180; 
} 

И я называю это так:

double LeftElbowAngle = AngleBetweenTwoVectors(ElbowLeft - ShoulderLeft, ElbowLeft - WristLeft); 
    double NeckAngle = AngleBetweenTwoVectors(Neck - Head, Neck - SpineBase); 

Правильно ли это? Я просто сомневаюсь в себе, потому что, когда я положил руку прямо или встал прямо, он обнаружил угол около 170 - 175, а не 180. На моей шее и на локтевом суставе

+0

Помните, что у вас есть 3 размеров там, получая руку или голова совершенно прямую мощь не очень легко. Как выглядят другие углы? – Chris

+0

Хорошо Левый/правый локтевой сустав - это 170-178, с тем, что кажется мне прямой рукой. Шея также примерно такая же, когда я стою совершенно прямо. То же самое с колени для ноги. И я не понял, как делать вычисления запястья, поскольку Kinect также соединяет запястье с большим пальцем ... Мой друг помог мне подтвердить, что все математически правильно. – ShatteredPheonix

+0

Как насчет 45, 90 и 135 градусов? В порядке? – Chris

ответ

1

Я подтвердил, что приведенный выше алгоритм корректен математически однако точность устройства может быть немного не в связи с аппаратными средствами, и отдельные человеческие кости могут предотвратить от идеального совместного расширения, который является 180.

 Смежные вопросы

  • Нет связанных вопросов^_^