Angle Between two vectors.

33 views (last 30 days)
Andrew Bass
Andrew Bass on 11 Apr 2020
Answered: James Tursa on 12 Apr 2020
How could I create a function that will take two vectors as inputs, and outputs the angle between them in radians.

Accepted Answer

Jim Riggs
Jim Riggs on 11 Apr 2020
Edited: Jim Riggs on 11 Apr 2020
Given two vectors A and B, the dot product of the two vectors (A dot B) gives the product ABcos(ang), so to get just the angle, you want to take the dot product of two unit vectors;
Assume A = [ax, ay, az], B = [bx, by, bz]
magA = sqrt(ax^2+ay^2+az^2); % = sqrt(A(1)^2 + A(2)^2 + A(3)^2)
magB = sqrt(bx^2+by^2+bz^2); % = sqrt(B(1)^2 + B(2)^2 + B(3)^2)
UA = [ax/magA, ay/magA, az/magA]; % A unit vector, = [A(1)/magA, A(2)/magA, A(3)/magA]
UB = [bx/magB, by/magB, bz/magB]; % B unit vector, = [B(1)/magB, B(2)/magB, B(3)/magB]
cosAng = dot(UA,UB); % = UA(1)*UB(1) + UA(2)*UB(2) + UA(3)*UB(3)
ang = acos(cosang); % This is the angle between vector A and Vector B, in radians
As a function;
function ang = Vangle(A,B)
magA = sqrt(A(1)^2 + A(2)^2 + A(3)^2);
magB = sqrt(B(1)^2 + B(2)^2 + B(3)^2);
UA = [A(1)/magA, A(2)/magA, A(3)/magA]
UB = [B(1)/magB, B(2)/magB, B(3)/magB]
cosAng = UA(1)*UB(1) + UA(2)*UB(2) + UA(3)*UB(3);
ang = acos(cosang);
  1 Comment
Andrew Bass
Andrew Bass on 12 Apr 2020
thank you! this was very helpful

Sign in to comment.

More Answers (1)

James Tursa
James Tursa on 12 Apr 2020


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!