Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm having some trouble calculating the angle of an human joint in 3D using the Microsoft Kinect.

Here's an example of the angle of the elbow (using the shoulder and wrist joint):

Image of example

Calculating angles between 0° and 180° is no problem, but when the person hyperextends his elbow my calculation returns 170° instead of 190°.

The calculation I'm using is as follows:

  1. $d = b - a$
  2. $e = b - c$

Where a, b and c are 3D-points and d and e are 3D-vectors.

My question is: How can I calculate the angle between $d$ en $e$ where the angle is between 0° and 360°?

Thanks in advance!

share|cite|improve this question
What exactly are $a, b, c, d$ and $e$? – Daan Michiels May 3 '12 at 11:12
@Daan Michiels: $a$, $b$ and $c$ are 3D-points. $d$ and $e$ are 3D-vectors. – Jeroen Corsius May 3 '12 at 11:17
I am doing the same task, can you provide some example project? – Ewerton Nov 7 '12 at 22:32
up vote 2 down vote accepted

How about implementing an algorithm to detect if the elbow is hyper-extending? If it is, then change the angle x into a reflex angle 360-x.

This algorithm would work by extending the line segment AB far enough to cover the x-position of C. Call D the point on AB with the same x-position as C. Then just compare the y-position of C and D to find out if the elbow is indeed hyper-extending.

share|cite|improve this answer
I think this might work. I'm going to try it out and let you know! – Jeroen Corsius May 3 '12 at 11:20
Thanks it works! – Jeroen Corsius May 3 '12 at 12:23

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.