From 6f101f40110cf1e5f49792ec2bf1ae4dfa0d3ab6 Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Sat, 25 Oct 2025 08:38:06 -0300 Subject: [PATCH] [examples] Added: `shapes_math_sine_cosine` (#5257) * draft: [examples] Added shapes_math_sine_cosine * draft: [examples] Added screenshot shapes_math_sine_cosine * Explementary * Varying radius * adjustments * added comments and reorganized UI labels * Updated Makefile, README.md, and examples_list.txt * tabs to spaces * Fix MSVC compilation --------- Co-authored-by: Ray --- examples/Makefile | 1 + examples/Makefile.Web | 4 + examples/README.md | 2 +- examples/examples_list.txt | 1 + examples/shapes/shapes_math_sine_cosine.c | 176 ++++++++++++++++++++ examples/shapes/shapes_math_sine_cosine.png | Bin 0 -> 22098 bytes 6 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 examples/shapes/shapes_math_sine_cosine.c create mode 100644 examples/shapes/shapes_math_sine_cosine.png diff --git a/examples/Makefile b/examples/Makefile index ef7cb5948..9ae8bb480 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -564,6 +564,7 @@ SHAPES = \ shapes/shapes_lines_bezier \ shapes/shapes_logo_raylib \ shapes/shapes_logo_raylib_anim \ + shapes/shapes_math_sine_cosine \ shapes/shapes_mouse_trail \ shapes/shapes_pie_chart \ shapes/shapes_rectangle_advanced \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 5d4f3ffab..0e9b9f92f 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -564,6 +564,7 @@ SHAPES = \ shapes/shapes_lines_bezier \ shapes/shapes_logo_raylib \ shapes/shapes_logo_raylib_anim \ + shapes/shapes_math_sine_cosine \ shapes/shapes_mouse_trail \ shapes/shapes_pie_chart \ shapes/shapes_rectangle_advanced \ @@ -899,6 +900,9 @@ shapes/shapes_logo_raylib: shapes/shapes_logo_raylib.c shapes/shapes_logo_raylib_anim: shapes/shapes_logo_raylib_anim.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +shapes/shapes_math_sine_cosine: shapes/shapes_math_sine_cosine.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + shapes/shapes_mouse_trail: shapes/shapes_mouse_trail.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) diff --git a/examples/README.md b/examples/README.md index 19d110344..bbb0a0388 100644 --- a/examples/README.md +++ b/examples/README.md @@ -71,7 +71,7 @@ Examples using raylib[core](../src/rcore.c) platform functionality like window c | [core_clipboard_text](core/core_clipboard_text.c) | core_clipboard_text | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Robin](https://github.com/RobinsAviary) | | [core_text_file_loading](core/core_text_file_loading.c) | core_text_file_loading | ⭐☆☆☆ | 5.5 | 5.6 | [Aanjishnu Bhattacharyya](https://github.com/NimComPoo-04) | -### category: shapes [31] +### category: shapes [32] Examples using raylib shapes drawing functionality, provided by raylib [shapes](../src/rshapes.c) module. diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 71cda6c1a..4805a37ec 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -80,6 +80,7 @@ shapes;shapes_vector_angle;★★☆☆;1.0;5.0;2023;2025;"Ramon Santamaria";@ra shapes;shapes_pie_chart;★★★☆;5.5;5.6;2025;2025;"Gideon Serfontein";@GideonSerf shapes;shapes_kaleidoscope;★★☆☆;5.5;5.6;2025;2025;"Hugo ARNAL";@hugoarnal shapes;shapes_clock_of_clocks;★★☆☆;5.5;5.6-dev;2025;2025;"JP Mortiboys";@themushroompirates +shapes;shapes_math_sine_cosine;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Jopestpe";@jopestpe shapes;shapes_mouse_trail;★☆☆☆;5.6;5.6-dev;2025;2025;"Balamurugan R";@Bala050814 shapes;shapes_simple_particles;★★☆☆;5.6;5.6;2025;2025;"Jordi Santonja";@JordSant shapes;shapes_starfield_effect;★★☆☆;5.5;5.6-dev;2025;2025;"JP Mortiboys";@themushroompirates diff --git a/examples/shapes/shapes_math_sine_cosine.c b/examples/shapes/shapes_math_sine_cosine.c new file mode 100644 index 000000000..f61d4f548 --- /dev/null +++ b/examples/shapes/shapes_math_sine_cosine.c @@ -0,0 +1,176 @@ +/******************************************************************************************* +* +* raylib [shapes] example - math sine cosine +* +* Example complexity rating: [★★☆☆] 2/4 +* +* Example originally created with raylib 5.6-dev, last time updated with raylib 5.6-dev +* +* Example contributed by Jopestpe (@jopestpe) +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2025-2025 Jopestpe (@jopestpe) +* +********************************************************************************************/ + +#include "raylib.h" +#include +#include "raymath.h" + +#define RAYGUI_IMPLEMENTATION +#include "raygui.h" // Required for GUI controls + +// Wave points for sine/cosine visualization +#define WAVE_POINTS 36 + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + SetConfigFlags(FLAG_MSAA_4X_HINT); + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - math sine cosine"); + + Vector2 sinePoints[WAVE_POINTS]; + Vector2 cosPoints[WAVE_POINTS]; + Vector2 center = { (screenWidth/2.0f) - 30.f, screenHeight/2.0f }; + Rectangle start = { 20.f, screenHeight - 120.f , 200.0f, 100.0f}; + float radius = 130.0f; + float angle = 0.0f; + bool pause = false; + + for (int i = 0; i < WAVE_POINTS; i++) + { + float t = i/(float)(WAVE_POINTS - 1); + float currentAngle = t*360.0f*DEG2RAD; + sinePoints[i] = (Vector2){ start.x + t*start.width, start.y + start.height/2.0f - sinf(currentAngle)*(start.height/2.0f) }; + cosPoints[i] = (Vector2){ start.x + t*start.width, start.y + start.height/2.0f - cosf(currentAngle)*(start.height/2.0f) }; + } + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + float angleRad = angle*DEG2RAD; + float cosRad = cosf(angleRad); + float sinRad = sinf(angleRad); + + Vector2 point = { center.x + cosRad*radius, center.y - sinRad*radius }; + Vector2 limitMin = { center.x - radius, center.y - radius }; + Vector2 limitMax = { center.x + radius, center.y + radius }; + + float complementary = 90.0f - angle; + float supplementary = 180.0f - angle; + float explementary = 360.0f - angle; + + float tangent = Clamp(tanf(angleRad), -10.0f, 10.0f); + float cotangent = (fabsf(tangent) > 0.001f) ? Clamp(1.0f/tangent, -radius, radius) : 0.0f; + Vector2 tangentPoint = { center.x + radius, center.y - tangent*radius }; + Vector2 cotangentPoint = { center.x + cotangent*radius, center.y - radius }; + + angle = Wrap(angle + (!pause ? 1.0f : 0.0f), 0.0f, 360.0f); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + ClearBackground(RAYWHITE); + + // Cotangent (orange) + DrawLineEx((Vector2){ center.x , limitMin.y }, (Vector2){ cotangentPoint.x, limitMin.y }, 2.0f, ORANGE); + DrawLineDashed(center, cotangentPoint, 10.0f, 4.0f, ORANGE); + + // Side background + DrawLine(580, 0, 580, GetScreenHeight(), (Color){ 218, 218, 218, 255 }); + DrawRectangle(580, 0, GetScreenWidth(), GetScreenHeight(), (Color){ 232, 232, 232, 255 }); + + // Base circle and axes + DrawCircleLinesV(center, radius, GRAY); + DrawLineEx((Vector2){ center.x, limitMin.y }, (Vector2){ center.x, limitMax.y }, 1.0f, GRAY); + DrawLineEx((Vector2){ limitMin.x, center.y }, (Vector2){ limitMax.x, center.y }, 1.f, GRAY); + + // Wave graph axes + DrawLineEx((Vector2){ start.x , start.y }, (Vector2){ start.x , start.y + start.height }, 2.0f, GRAY); + DrawLineEx((Vector2){ start.x + start.width, start.y }, (Vector2){ start.x + start.width, start.y + start.height }, 2.0f, GRAY); + DrawLineEx((Vector2){ start.x, start.y + start.height/2 }, (Vector2){ start.x + start.width, start.y + start.height/2 }, 2.0f, GRAY); + + // Wave graph axis labels + DrawText("1", start.x - 8, start.y, 6, GRAY); + DrawText("0", start.x - 8, start.y + start.height/2 - 6, 6, GRAY); + DrawText("-1", start.x - 12, start.y + start.height - 8, 6, GRAY); + DrawText("0", start.x - 2, start.y + start.height + 4, 6, GRAY); + DrawText("360", start.x + start.width - 8, start.y + start.height + 4, 6, GRAY); + + // Sine (red - vertical) + DrawLineEx((Vector2){ center.x, center.y }, (Vector2){ center.x, point.y }, 2.0f, RED); + DrawLineDashed((Vector2){ point.x, center.y }, (Vector2){ point.x, point.y }, 10.0f, 4.0f, RED); + DrawText(TextFormat("Sine %.2f", sinRad), 640, 190, 6, RED); + DrawCircleV((Vector2){ start.x + (angle/360.0f)*start.width, start.y + ((-sinRad + 1)*start.height/2.0f) }, 4.0f, RED); + DrawSplineLinear(sinePoints, WAVE_POINTS, 1.0f, RED); + + // Cosine (blue - horizontal) + DrawLineEx((Vector2){ center.x, center.y }, (Vector2){ point.x, center.y }, 2.0f, BLUE); + DrawLineDashed((Vector2){ center.x , point.y }, (Vector2){ point.x, point.y }, 10.0f, 4.0f, BLUE); + DrawText(TextFormat("Cosine %.2f", cosRad), 640, 210, 6, BLUE); + DrawCircleV((Vector2){ start.x + (angle/360.0f)*start.width, start.y + ((-cosRad + 1)*start.height/2.0f) }, 4.0f, BLUE); + DrawSplineLinear(cosPoints, WAVE_POINTS, 1.0f, BLUE); + + // Tangent (purple) + DrawLineEx((Vector2){ limitMax.x , center.y }, (Vector2){ limitMax.x, tangentPoint.y }, 2.0f, PURPLE); + DrawLineDashed(center, tangentPoint, 10.0f, 4.0f, PURPLE); + DrawText(TextFormat("Tangent %.2f", tangent), 640, 230, 6, PURPLE); + + // Cotangent (orange) + DrawText(TextFormat("Cotangent %.2f", cotangent), 640, 250, 6, ORANGE); + + // Complementary angle (beige) + DrawCircleSectorLines(center, radius*0.6f , -angle, -90.f , 36.0f, BEIGE); + DrawText(TextFormat("Complementary %0.f°",complementary), 640, 150, 6, BEIGE); + + // Supplementary angle (darkblue) + DrawCircleSectorLines(center, radius*0.5f , -angle, -180.f , 36.0f, DARKBLUE); + DrawText(TextFormat("Supplementary %0.f°",supplementary), 640, 130, 6, DARKBLUE); + + // Explementary angle (pink) + DrawCircleSectorLines(center, radius*0.4f , -angle, -360.f , 36.0f, PINK); + DrawText(TextFormat("Explementary %0.f°",explementary), 640, 170, 6, PINK); + + // Current angle - arc (lime), radius (black), endpoint (black) + DrawCircleSectorLines(center, radius*0.7f , -angle, 0.f, 36.0f, LIME); + DrawLineEx((Vector2){ center.x , center.y }, point, 2.0f, BLACK); + DrawCircleV(point, 4.0f, BLACK); + + // Draw GUI controls + //------------------------------------------------------------------------------ + GuiSetStyle(LABEL, TEXT_COLOR_NORMAL, ColorToInt(GRAY)); + GuiToggle((Rectangle){ 640, 70, 120, 20}, TextFormat("Pause"), &pause); + GuiSetStyle(LABEL, TEXT_COLOR_NORMAL, ColorToInt(LIME)); + GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.0f°", angle), &angle, 0.0f, 360.f); + + // Angle values panel + GuiGroupBox((Rectangle){ 620, 110, 140, 170}, "Angle Values"); + //------------------------------------------------------------------------------ + DrawFPS(10, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} \ No newline at end of file diff --git a/examples/shapes/shapes_math_sine_cosine.png b/examples/shapes/shapes_math_sine_cosine.png new file mode 100644 index 0000000000000000000000000000000000000000..b561f74fbbd06ab006df7e5789e79a6cba255b07 GIT binary patch literal 22098 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 literal 0 HcmV?d00001