How to find angle between 2 3D vectors?
Show older comments
Hello, I have 2 sets of 3D data and I want to find out the angle between the two after dimensionality reduction. I have written the following code but the accurate angle is not showing.
z2 and z3 are the two mesh grids generated from the 3D data.
[V2,D2]=eigs(z2);
P2=svd(V2);
[V1,D1] = eigs(z3);
V1=sort(V1,'descend');
P1=svd(V1);
angle = atan2(norm(cross(P1,P2)), dot(P1,P2))
Can anybody help me in this regard? Thanks in advance, Ampi.
3 Comments
Matt J
on 1 Jun 2013
Give us an example of P1(:,i) and P2(:,i) whose angle calculation doesn't look correct.
Roger Stafford
on 1 Jun 2013
If P1 and P2 are three-element vectors, your formula for the 3D inner angle between them is correct. However I have questions about the preceding code. For example, if you use the non-negative singular values coming from 'svd' for P1 and P2 element values, that restricts your angle to the range 0 to pi/2 radians (0 to 90 degrees). How do you justify that? What are the sizes of z2 and z3? If they are other than 3-by-3, you will have something other than three eigenvectors in V2 and V1 and consequently other than three singular values in both P2 and P1 vectors.
Answers (1)
Youssef Khmou
on 2 Jun 2013
hi,
is it atan or cos^-1 (acos) because the scalat product is :
V.U=||U||.||V||.cos(U^V);
Categories
Find more on MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!