@ -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 ( ) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -