Angle between two 3D vectors
    10 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Maciej Kupras
 il 30 Ott 2022
  
    
    
    
    
    Commentato: Maciej Kupras
 il 30 Ott 2022
            I do have one column vector:
st_direction =
0.6320
0.7308
0.2579
And the matrix of (let's say) 5 vectors:
A =
-0.8903   -0.6071   -0.7037    0.4638    0.7759
0.3896    0.5431   -0.1126   -0.2208   -0.4987
0.2358   -0.5801    0.7015   -0.8580    0.3863
I need to calculate angles between vector st_direction and each column vector from A matrix, for example:
- angle between vector [0.6320 0.7308 0.2579] and vector [-0.8903, 0.3896, 0.2358].
Currently I'm trying to calculate it like that:
acos((dot(A(:,i),st_direction))/(norm(A(:,i))*norm(st_direction)))
But I think that something is wrong, because in later stages of a code I must check whether this angle is less than given variable:
acos((dot(A(:,i),st_direction))/(norm(A(:,i))*norm(st_direction)))<=deg2rad(fov_st)
I think that something is wrong because the program spits many point that when plotted on a graph are very far away. Is there any mistake?
Below there is an example for a greater amount of column vectors in matrix A (1000, generated as units vectors ) so it's easier to see. Red points are the points that satisfy the equation and the cyan line is the st_direction vector. As you can see, those points seem to be very randomly distributed.

0 Commenti
Risposta accettata
  David Hill
      
      
 il 30 Ott 2022
        I don't see anything wrong. I assume you are using a loop.
st_direction =[0.6320;0.7308;0.2579];
 A =[-0.8903   -0.6071   -0.7037    0.4638    0.7759
0.3896    0.5431   -0.1126   -0.2208   -0.4987
0.2358   -0.5801    0.7015   -0.8580    0.3863];
for k=1:5
   Angles(k)=acos((dot(A(:,k),st_direction))/(norm(A(:,k))*norm(st_direction)));
end
Angles
Più risposte (1)
  KALYAN ACHARJYA
      
      
 il 30 Ott 2022
        
      Modificato: KALYAN ACHARJYA
      
      
 il 30 Ott 2022
  
      "I need to calculate angles between vector st_direction and each column vector from A matrix, for example:"
st_direction =[0.6320 0.7308 0.2579];
A =[-0.8903   -0.6071   -0.7037    0.4638    0.7759
    0.3896    0.5431   -0.1126   -0.2208   -0.4987
    0.2358   -0.5801    0.7015   -0.8580    0.3863];
angle_data=zeros(1,size(A,2)); % Memory Pre-Allocation
for i=1:size(A,2)
    angle_data(i)=atan2(norm(cross(st_direction,A(:,i))),dot(st_direction,A(:,i))); %radians
end
angle_data
Angle in Degrees ()
angle_data =
102.5408   97.8392  110.2498   95.1358   76.9647
Use atan2d instead of atan2
%If any issue let me know, be specific please! 
Vedere anche
Categorie
				Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


