MATLAB Answers


Finding Joint Angle from Motion Capture

Asked by Mary
on 12 Dec 2012
Latest activity Edited by TAEYUN
on 30 Oct 2014


I'm working right now with data from a motion capture device, essentially picking up data for three markers placed on the head neck and shoulder in an x y z plane.

My difficulty trying to develop a code to calculate the joint angles between these three markers. I am able to animate the three coordinates to play as an animation, but I'm more interested in the calculation of the angles between these points changing over time.

Any ideas on how to go about this?




No products are associated with this question.

1 Answer

Answer by Roger Stafford
on 12 Dec 2012
 Accepted answer

At any time, let H = [x,y,z], N = [x,y,z], S = [x,y,z] be coordinate vectors of the head, neck, and shoulder markers at that time.  Then the three respective inner angles within the triangle HNS then are:
 h = atan2(norm(cross(N-H,S-H)),dot(N-H,S-H));
 n = atan2(norm(cross(S-N,H-N)),dot(S-N,H-N));
 s = atan2(norm(cross(H-S,N-S)),dot(H-S,N-S));

(The sum of these should always be pi to within round-off accuracy.)

Roger Stafford


on 12 Dec 2012

Thank you again for the response! I managed to get that aspect of my motion capture data working. Most of the trouble I had was conceptually figuring out how to break down my data into each [x,y,z] coordinate.

Would you happen to know how I can take these same data sets of three points in separate x, y, and z columns and figure out the velocity and acceleration of these moving joints? I'm hoping to compare different data sets of the moving head neck and shoulder to identify which is cause the most stress internally, so looking at the motion capture data is becoming somewhat more difficult than working with my empirical biomechanical model!

Thank you (I hope I'm not asking too much!!!)

Hi, Thank you for the answer. Could you please explain why the sum should always be pi?

With 3D coordinates how can we specify the position in space, by the angles? thank you

on 30 Oct 2014

u r a awesome dude!!!! i luv u!!!

Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!