@ -2,7 +2,7 @@  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    raylib  [ shapes ]  example  -  Vector  Angle  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  originally  created  with  raylib  1.0 ,  last  time  updated  with  raylib  4.2   
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  originally  created  with  raylib  1.0 ,  last  time  updated  with  raylib  4.6   
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  licensed  under  an  unmodified  zlib / libpng  license ,  which  is  an  OSI - certified ,  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    BSD - like  license  that  allows  static  linking  with  closed  source  software  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -10,7 +10,7 @@  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Copyright  ( c )  2023  Ramon  Santamaria  ( @ raysan5 )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			   
			
		 
		
	
		
			
			 
			 
			
			 
			
			# include  "raylib.h"  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# include  "raymath.h"  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -28,7 +28,7 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    InitWindow ( screenWidth ,  screenHeight ,  " raylib [math] example - vector angle " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    Vector2  v0  =  {  screenWidth / 2 ,  screenHeight / 2  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    Vector2  v1  =  {  100.0f ,  80.0f  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    Vector2  v1  =  n">Vector2Add ( v0 ,  ( Vector2 ) {  100.0f ,  80.0f  })  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    Vector2  v2  =  {  0  } ;              / /  Updated  with  mouse  position   
			
		 
		
	
		
			
			 
			 
			
			 
			
			      
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  angle  =  0.0f ;              / /  Angle  in  degrees   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -42,21 +42,29 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  Update   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        float  startangle ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( angleMode  = =  0 )  startangle  =  - Vector2LineAngle ( v0 ,  v1 ) * RAD2DEG ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( angleMode  = =  1 )  startangle  =  0.0f ;    
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        v2  =  GetMousePosition ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_SPACE ) )  angleMode  =  ! angleMode ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			          
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if ( angleMode  = =  0  & &  IsMouseButtonDown ( MOUSE_BUTTON_RIGHT ) )  v1  =  GetMousePosition ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( angleMode  = =  0 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Calculate  angle  between  two  vectors ,  considering  a  common  origin  ( v0 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            v1  =  Vector2Add ( v0 ,  ( Vector2 ) {  100.0f ,  80.0f  } ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            v2  =  GetMousePosition ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            angle  =  Vector2Angle ( Vector2Normalize ( Vector2Subtract ( v1 ,  v0 ) ) ,  Vector2Normalize ( Vector2Subtract ( v2 ,  v0 ) ) ) * RAD2DEG ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            Vector2  v1Normal  =  Vector2Normalize ( Vector2Subtract ( v1 ,  v0 ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            Vector2  v2Normal  =  Vector2Normalize ( Vector2Subtract ( v2 ,  v0 ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            angle  =  Vector2Angle ( v1Normal ,  v2Normal ) * RAD2DEG ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  if  ( angleMode  = =  1 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Calculate  angle  defined  by  a  two  vectors  line ,  in  reference  to  horizontal  line   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            v1  =  ( Vector2 ) {  screenWidth / 2 ,  screenHeight / 2  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            v2  =  GetMousePosition ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            angle  =  Vector2LineAngle ( v1 ,  v2 ) * RAD2DEG ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            angle  =  Vector2LineAngle ( v0 ,  v2 ) * RAD2DEG ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -66,32 +74,40 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            ClearBackground ( RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			              
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( angleMode  = =  0 )  DrawText ( " v0 " ,  v0 . x ,  v0 . y ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( " v1 " ,  v1 . x ,  v1 . y ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( " v2 " ,  v2 . x ,  v2 . y ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( angleMode  = =  0 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " MODE: Angle between V1 and V2 " ,  10 ,  10 ,  20 ,  BLACK ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " MODE 0: Angle between V1 and V2 " ,  10 ,  10 ,  20 ,  BLACK ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Right Click to Move V2 " ,  10 ,  30 ,  20 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawLineEx ( v0 ,  v1 ,  2.0f ,  BLACK ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawLineEx ( v0 ,  v2 ,  2.0f ,  RED ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                float  startangle  =  90  -  Vector2LineAngle ( v0 ,  v1 ) * RAD2DEG ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawCircleSector ( v0 ,  40.0f ,  startangle ,  startangle  +  angle  -  360.0f * ( angle  >  180.0f ) ,  32 ,  Fade ( GREEN ,  0.6f ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawCircleSector ( v0 ,  40.0f ,  startangle ,  startangle  -  angle ,  32 ,  Fade ( GREEN ,  0.6f ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            else  if  ( angleMode  = =  1 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " MODE: Angle formed by line V1 to V2 " ,  10 ,  10 ,  20 ,  BLACK ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " MODE 1 : Angle formed by line V1 to V2 " ,  10 ,  10 ,  20 ,  BLACK ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawLine ( 0 ,  screenHeight / 2 ,  screenWidth ,  screenHeight / 2 ,  LIGHTGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawLineEx ( v1  ,  v2 ,  2.0f ,  RED ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawLineEx ( v0  ,  v2 ,  2.0f ,  RED ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawCircleSector ( v1 ,  40.0f ,  90.0f ,  180  -  angle  -  90  ,  32 ,  Fade ( GREEN ,  0.6f ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawCircleSector ( v0 ,  40.0f ,  startangle ,  startangle  -  angle  ,  32 ,  Fade ( GREEN ,  0.6f ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			              
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( " v0 " ,  v0 . x ,  v0 . y ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  If  the  line  from  v0  to  v1  would  overlap  the  text ,  move  it ' s  position  up  10   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( angleMode  = =  0  & &  Vector2Subtract ( v0 ,  v1 ) . y  >  0.0f )  DrawText ( " v1 " ,  v1 . x ,  v1 . y - 10.0f ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( angleMode  = =  0  & &  Vector2Subtract ( v0 ,  v1 ) . y  <  0.0f )  DrawText ( " v1 " ,  v1 . x ,  v1 . y ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  If  angle  mode  1 ,  use  v1  to  emphasize  the  horizontal  line   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( angleMode  = =  1 )  DrawText ( " v1 " ,  v0 . x  +  40.0f ,  v0 . y ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  position  adjusted  by  - 10  so  it  isn ' t  hidden  by  cursor   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( " v2 " ,  v2 . x - 10.0f ,  v2 . y - 10.0f ,  10 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( " Press SPACE to change MODE " ,  460 ,  10 ,  20 ,  DARKGRAY ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( TextFormat ( " ANGLE: %2.2f " ,  angle ) ,  10 ,  40 ,  20 ,  LIME ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            DrawText ( TextFormat ( " ANGLE: %2.2f " ,  angle ) ,  10 ,  7 0,  20 ,  LIME ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			              
			
		 
		
	
		
			
			 
			 
			
			 
			
			        EndDrawing ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -