How to obtain the three angles (xy, yz, xz planes) of one vector relative to other vector?

11 ビュー (過去 30 日間)
I need to find the angles between two vectors (v1=p1-p2; v2=p2-p3) defined by three points (p1, p2 and p3). The problem is that I can only get one angle, and I need the three angles that represents the position of the second vector in respect to the first. In other words I need to calculate the angle in sagittal perspective, frontal perspective and tranverse perspective. These two vectors represents two segments of the body and I need to see the position of the distal segment relative to the proximal one.
This is a code that I have until now.
p1=[-83.3958 12.4263 36.4348];
p2=[-86.9626 21.0892 23.2980];
p3=[ -274.7046 58.9844 -171.2332];
v1 = p2-p1;
v2 = p3-p2;
angle = rad2deg(atan2(norm(cross(v1,v2)),dot(v1,v2)));
I see in other forums, but none have a explain how to calculate the three angles of one vector relative to a another. Thanks in advance.

採用された回答

David Sanchez
David Sanchez 2013 年 12 月 19 日
I think you should project the vectors onto each plane consecutively and calculate then the angle formed by the projections:
p1=[-83.3958 12.4263 36.4348];
p2=[-86.9626 21.0892 23.2980];
p3=[ -274.7046 58.9844 -171.2332];
v1 = p2-p1;
v2 = p3-p2;
v_1 = [v1(1) v1(2)];
v_2 = [v2(1) v2(2)];
ang1 = acos(dot(v_1,v_2)/(norm(v_1)*norm(v_2)));
v_1 = [v1(2) v1(3)];
v_2 = [v2(2) v2(3)];
ang2 = acos(dot(v_1,v_2)/(norm(v_1)*norm(v_2)));
v_1 = [v1(1) v1(3)];
v_2 = [v2(1) v1(3)];
ang3 = acos(dot(v_1,v_2)/(norm(v_1)*norm(v_2)));

その他の回答 (1 件)

Paulo Oliveira
Paulo Oliveira 2013 年 12 月 19 日
I tried your code, i have angles for each plane, but I read in other places that I have to calculate the euler angles to determine the angles for each plane, do you understand this? Thanks for your attention.

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by