From 8b909583234c1a1018903bf7dec37ea13b5c663e Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:12:14 -0300 Subject: [PATCH 1/7] ADDED: example: shapes_recursive_tree --- examples/Makefile | 1 + examples/Makefile.Web | 4 + examples/README.md | 5 +- examples/examples_list.txt | 1 + examples/shapes/shapes_recursive_tree.c | 103 ++++++++++++++++++++++ examples/shapes/shapes_recursive_tree.png | Bin 0 -> 13440 bytes 6 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 examples/shapes/shapes_recursive_tree.c create mode 100644 examples/shapes/shapes_recursive_tree.png diff --git a/examples/Makefile b/examples/Makefile index fb33b4894759..a36b9e447623 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -559,6 +559,7 @@ SHAPES = \ shapes/shapes_logo_raylib_anim \ shapes/shapes_rectangle_advanced \ shapes/shapes_rectangle_scaling \ + shapes/shapes_recursive_tree \ shapes/shapes_ring_drawing \ shapes/shapes_rounded_rectangle_drawing \ shapes/shapes_splines_drawing \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 0dbefadf2672..2d3018abf007 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -559,6 +559,7 @@ SHAPES = \ shapes/shapes_logo_raylib_anim \ shapes/shapes_rectangle_advanced \ shapes/shapes_rectangle_scaling \ + shapes/shapes_recursive_tree \ shapes/shapes_ring_drawing \ shapes/shapes_rounded_rectangle_drawing \ shapes/shapes_splines_drawing \ @@ -868,6 +869,9 @@ shapes/shapes_rectangle_advanced: shapes/shapes_rectangle_advanced.c shapes/shapes_rectangle_scaling: shapes/shapes_rectangle_scaling.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +shapes/shapes_recursive_tree: shapes/shapes_recursive_tree.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + shapes/shapes_ring_drawing: shapes/shapes_ring_drawing.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) diff --git a/examples/README.md b/examples/README.md index 70e07df2bac0..d852e7105a14 100644 --- a/examples/README.md +++ b/examples/README.md @@ -17,7 +17,7 @@ You may find it easier to use than other toolchains, especially when it comes to - `zig build [module]` to compile all examples for a module (e.g. `zig build core`) - `zig build [example]` to compile _and run_ a particular example (e.g. `zig build core_basic_window`) -## EXAMPLES COLLECTION [TOTAL: 172] +## EXAMPLES COLLECTION [TOTAL: 173] ### category: core [40] @@ -66,7 +66,7 @@ Examples using raylib[core](../src/rcore.c) platform functionality like window c | [core_undo_redo](core/core_undo_redo.c) | core_undo_redo | ⭐⭐⭐☆ | 5.5 | 5.6 | [Ramon Santamaria](https://github.com/raysan5) | | [core_input_actions](core/core_input_actions.c) | core_input_actions | ⭐⭐☆☆ | 5.5 | 5.6 | [Jett](https://github.com/JettMonstersGoBoom) | -### category: shapes [23] +### category: shapes [24] Examples using raylib shapes drawing functionality, provided by raylib [shapes](../src/rshapes.c) module. @@ -84,6 +84,7 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes]( | [shapes_following_eyes](shapes/shapes_following_eyes.c) | shapes_following_eyes | ⭐⭐☆☆ | 2.5 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) | | [shapes_easings_ball](shapes/shapes_easings_ball.c) | shapes_easings_ball | ⭐⭐☆☆ | 2.5 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) | | [shapes_easings_box](shapes/shapes_easings_box.c) | shapes_easings_box | ⭐⭐☆☆ | 2.5 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) | +| [shapes_recursive_tree](shapes/shapes_recursive_tree.c) | shapes_recursive_tree | ⭐⭐⭐☆ | 5.6-dev | 5.6-dev| [Jopestpe](https://github.com/jopestpe) | | [shapes_easings_rectangles](shapes/shapes_easings_rectangles.c) | shapes_easings_rectangles | ⭐⭐⭐☆ | 2.0 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) | | [shapes_ring_drawing](shapes/shapes_ring_drawing.c) | shapes_ring_drawing | ⭐⭐⭐☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | | [shapes_circle_sector_drawing](shapes/shapes_circle_sector_drawing.c) | shapes_circle_sector_drawing | ⭐⭐⭐☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) | diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 50643bf2b50e..5a0c679a48b0 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -60,6 +60,7 @@ shapes;shapes_following_eyes;★★☆☆;2.5;2.5;2013;2025;"Ramon Santamaria";@ shapes;shapes_easings_ball;★★☆☆;2.5;2.5;2014;2025;"Ramon Santamaria";@raysan5 shapes;shapes_easings_box;★★☆☆;2.5;2.5;2014;2025;"Ramon Santamaria";@raysan5 shapes;shapes_easings_rectangles;★★★☆;2.0;2.5;2014;2025;"Ramon Santamaria";@raysan5 +shapes;shapes_recursive_tree;★★★☆;5.6-dev;5.6-dev;2025;2025;"Jopestpe";@jopestpe shapes;shapes_ring_drawing;★★★☆;2.5;2.5;2018;2025;"Vlad Adrian";@demizdor shapes;shapes_circle_sector_drawing;★★★☆;2.5;2.5;2018;2025;"Vlad Adrian";@demizdor shapes;shapes_rounded_rectangle_drawing;★★★☆;2.5;2.5;2018;2025;"Vlad Adrian";@demizdor diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c new file mode 100644 index 000000000000..c29899cc02f9 --- /dev/null +++ b/examples/shapes/shapes_recursive_tree.c @@ -0,0 +1,103 @@ +/******************************************************************************************* +* +* raylib [shapes] example - shapes recursive tree +* +* Example complexity rating: [★★★☆] 3/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) 2018-2025 Jopestpe (@jopestpe) +* +********************************************************************************************/ + +#include "raylib.h" +#include + +#define RAYGUI_IMPLEMENTATION +#include "raygui.h" // Required for GUI controls + +float theta; +float thick = 1.0f; +float branchDecay = 0.66f; +bool bezier = false; + +void Branch(Vector2 start, float length, float angle) { + length *= branchDecay; + + if (length > 2) { + Vector2 end = { + start.x + length * sinf(angle), + start.y - length * cosf(angle) + }; + + if(!bezier) DrawLineEx(start, end, thick, RED); + else DrawLineBezier(start, end, thick, RED); + + Branch(end, length, angle + theta); + Branch(end, length, angle - theta); + } +} + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - shapes recursive tree"); + + Vector2 start = { (screenWidth / 2.0f) - 125, screenHeight }; + Vector2 end = { (screenWidth / 2.0f) - 125, screenHeight - 120.0f }; + float angle = 0.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 + { + float a = (angle / screenWidth) * 90.0f; + theta = a * (PI / 180.0f); + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawLine(560, 0, 560, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); + DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); + + // Draw GUI controls + //------------------------------------------------------------------------------ + GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.2f", angle), &angle, 0, 1600); + GuiSliderBar((Rectangle){ 640, 70, 120, 20}, "Thick", TextFormat("%.2f", thick), &thick, 1, 8); + GuiSliderBar((Rectangle){ 640, 100, 120, 20}, "Branch Decay", TextFormat("%.2f", branchDecay), &branchDecay, 0.1f, 0.78f); + GuiCheckBox((Rectangle){ 640, 130, 20, 20 }, "Bezier", &bezier); + //------------------------------------------------------------------------------ + + DrawLineEx(start, end, thick, RED); + Branch(end, 120.0f, 0.0f); + + 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_recursive_tree.png b/examples/shapes/shapes_recursive_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..4a850284dd7bb5cd6103d4bbd897d472170794e1 GIT binary patch literal 13440 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 TbaU`uiYRo?8EWRAvAy$Ow;RBh literal 0 HcmV?d00001 From bbede86d7d87fd92d2b7bd6eff9eb2bf13e8df53 Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Thu, 2 Oct 2025 21:58:10 -0300 Subject: [PATCH 2/7] [examples] Added shapes_recursive_tree --- examples/shapes/shapes_recursive_tree.c | 100 +++++++++++++++------- examples/shapes/shapes_recursive_tree.png | Bin 13440 -> 38404 bytes 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c index c29899cc02f9..b81852096244 100644 --- a/examples/shapes/shapes_recursive_tree.c +++ b/examples/shapes/shapes_recursive_tree.c @@ -21,27 +21,20 @@ #define RAYGUI_IMPLEMENTATION #include "raygui.h" // Required for GUI controls -float theta; -float thick = 1.0f; -float branchDecay = 0.66f; -bool bezier = false; - -void Branch(Vector2 start, float length, float angle) { - length *= branchDecay; - - if (length > 2) { - Vector2 end = { - start.x + length * sinf(angle), - start.y - length * cosf(angle) - }; - - if(!bezier) DrawLineEx(start, end, thick, RED); - else DrawLineBezier(start, end, thick, RED); - - Branch(end, length, angle + theta); - Branch(end, length, angle - theta); - } -} +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- +typedef struct { + Vector2 start; + float angle; + float length; +} Branch; + +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- +static Vector2 CalculateBranchEnd(Vector2 start, float angle, float length); +static void DrawBranch(Vector2 start, float angle, float length, float thick, bool bezier); //------------------------------------------------------------------------------------ // Program main entry point @@ -56,8 +49,12 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [shapes] example - shapes recursive tree"); Vector2 start = { (screenWidth / 2.0f) - 125, screenHeight }; - Vector2 end = { (screenWidth / 2.0f) - 125, screenHeight - 120.0f }; - float angle = 0.0f; + float angle = 45.0f; + float thick = 1.0f; + float treeDepth = 1.0f; + float branchDecay = 0.66f; + float length = 120.0f; + bool bezier = false; SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -65,28 +62,52 @@ int main(void) // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { - float a = (angle / screenWidth) * 90.0f; - theta = a * (PI / 180.0f); + // Update + //---------------------------------------------------------------------------------- + float theta = angle * DEG2RAD; + int maxBranches = (int)(powf(2, treeDepth) - 1); + Branch branches[4096]; + int count = 0; + + branches[count++] = (Branch){start, 0.0f, length}; + for (int i = 0; i < count; i++) { + Branch branch = branches[i]; + if (branch.length < 2) continue; + + Vector2 end = CalculateBranchEnd(branch.start, branch.angle, branch.length); + float nextLength = branch.length * branchDecay; + + if (count < maxBranches && nextLength >= 2) { + branches[count++] = (Branch){end, branch.angle + theta, nextLength}; + branches[count++] = (Branch){end, branch.angle - theta, nextLength}; + } + } // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); - DrawLine(560, 0, 560, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); - DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); + for (int i = 0; i < count; i++) { + Branch branch = branches[i]; + if (branch.length >= 2) { + DrawBranch(branch.start, branch.angle, branch.length, thick, bezier); + } + } + + DrawLine(560, 0, 560, GetScreenHeight(), (Color){ 218, 218, 218, 255 }); + DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), (Color){ 232, 232, 232, 255 }); // Draw GUI controls //------------------------------------------------------------------------------ - GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.2f", angle), &angle, 0, 1600); - GuiSliderBar((Rectangle){ 640, 70, 120, 20}, "Thick", TextFormat("%.2f", thick), &thick, 1, 8); + GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.0f", angle), &angle, 0, 180); + GuiSliderBar((Rectangle){ 640, 70, 120, 20 }, "Length", TextFormat("%.0f", length), &length, 12.0f, 240.0f); GuiSliderBar((Rectangle){ 640, 100, 120, 20}, "Branch Decay", TextFormat("%.2f", branchDecay), &branchDecay, 0.1f, 0.78f); - GuiCheckBox((Rectangle){ 640, 130, 20, 20 }, "Bezier", &bezier); + GuiSliderBar((Rectangle){ 640, 130, 120, 20 }, "Tree Depth", TextFormat("%.0f", treeDepth), &treeDepth, 1.0f, 12.f); + GuiSliderBar((Rectangle){ 640, 160, 120, 20}, "Thick", TextFormat("%.0f", thick), &thick, 1, 8); + GuiCheckBox((Rectangle){ 640, 190, 20, 20 }, "Bezier", &bezier); //------------------------------------------------------------------------------ - - DrawLineEx(start, end, thick, RED); - Branch(end, 120.0f, 0.0f); DrawFPS(10, 10); @@ -100,4 +121,17 @@ int main(void) //-------------------------------------------------------------------------------------- return 0; +} + +static Vector2 CalculateBranchEnd(Vector2 start, float angle, float length) { + return (Vector2){ + start.x + length * sinf(angle), + start.y - length * cosf(angle) + }; +} + +static void DrawBranch(Vector2 start, float angle, float length, float thick, bool bezier) { + Vector2 end = CalculateBranchEnd(start, angle, length); + if (!bezier) DrawLineEx(start, end, thick, RED); + else DrawLineBezier(start, end, thick, RED); } \ No newline at end of file diff --git a/examples/shapes/shapes_recursive_tree.png b/examples/shapes/shapes_recursive_tree.png index 4a850284dd7bb5cd6103d4bbd897d472170794e1..ed7b613b0918fedcec5d78a12d203b405175062e 100644 GIT binary patch literal 38404 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

FTHha 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 x{Vx>kChw^5Kj^*<;2QA-P literal 13440 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 TbaU`uiYRo?8EWRAvAy$Ow;RBh From 74f4ba744d6973a1cf2365ce32161e10add45783 Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Thu, 2 Oct 2025 23:50:35 -0300 Subject: [PATCH 3/7] [examples] shapes_recursive_tree: adjustments --- examples/shapes/shapes_recursive_tree.c | 39 +++++++++++----------- examples/shapes/shapes_recursive_tree.png | Bin 38404 -> 18372 bytes 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c index b81852096244..6b273ac8c880 100644 --- a/examples/shapes/shapes_recursive_tree.c +++ b/examples/shapes/shapes_recursive_tree.c @@ -26,6 +26,7 @@ //---------------------------------------------------------------------------------- typedef struct { Vector2 start; + Vector2 end; float angle; float length; } Branch; @@ -34,7 +35,6 @@ typedef struct { // Module Functions Declaration //---------------------------------------------------------------------------------- static Vector2 CalculateBranchEnd(Vector2 start, float angle, float length); -static void DrawBranch(Vector2 start, float angle, float length, float thick, bool bezier); //------------------------------------------------------------------------------------ // Program main entry point @@ -49,9 +49,9 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [shapes] example - shapes recursive tree"); Vector2 start = { (screenWidth / 2.0f) - 125, screenHeight }; - float angle = 45.0f; + float angle = 40.0f; float thick = 1.0f; - float treeDepth = 1.0f; + float treeDepth = 10.0f; float branchDecay = 0.66f; float length = 120.0f; bool bezier = false; @@ -68,21 +68,27 @@ int main(void) int maxBranches = (int)(powf(2, treeDepth) - 1); Branch branches[4096]; int count = 0; - - branches[count++] = (Branch){start, 0.0f, length}; + + Vector2 initialEnd = CalculateBranchEnd(start, 0.0f, length); + branches[count++] = (Branch){start, initialEnd, 0.0f, length}; for (int i = 0; i < count; i++) { Branch branch = branches[i]; if (branch.length < 2) continue; - Vector2 end = CalculateBranchEnd(branch.start, branch.angle, branch.length); float nextLength = branch.length * branchDecay; if (count < maxBranches && nextLength >= 2) { - branches[count++] = (Branch){end, branch.angle + theta, nextLength}; - branches[count++] = (Branch){end, branch.angle - theta, nextLength}; + Vector2 branchStart = branch.end; + + Vector2 branchEnd1 = CalculateBranchEnd(branchStart, branch.angle + theta, nextLength); + Vector2 branchEnd2 = CalculateBranchEnd(branchStart, branch.angle - theta, nextLength); + + branches[count++] = (Branch){branchStart, branchEnd1, branch.angle + theta, nextLength}; + branches[count++] = (Branch){branchStart, branchEnd2, branch.angle - theta, nextLength}; } } + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); @@ -92,19 +98,20 @@ int main(void) for (int i = 0; i < count; i++) { Branch branch = branches[i]; if (branch.length >= 2) { - DrawBranch(branch.start, branch.angle, branch.length, thick, bezier); + if (!bezier) DrawLineEx(branch.start, branch.end, thick, RED); + else DrawLineBezier(branch.start, branch.end, thick, RED); } } - DrawLine(560, 0, 560, GetScreenHeight(), (Color){ 218, 218, 218, 255 }); - DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), (Color){ 232, 232, 232, 255 }); + DrawLine(580, 0, 580, GetScreenHeight(), (Color){ 218, 218, 218, 255 }); + DrawRectangle(580, 0, GetScreenWidth(), GetScreenHeight(), (Color){ 232, 232, 232, 255 }); // Draw GUI controls //------------------------------------------------------------------------------ GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.0f", angle), &angle, 0, 180); GuiSliderBar((Rectangle){ 640, 70, 120, 20 }, "Length", TextFormat("%.0f", length), &length, 12.0f, 240.0f); - GuiSliderBar((Rectangle){ 640, 100, 120, 20}, "Branch Decay", TextFormat("%.2f", branchDecay), &branchDecay, 0.1f, 0.78f); - GuiSliderBar((Rectangle){ 640, 130, 120, 20 }, "Tree Depth", TextFormat("%.0f", treeDepth), &treeDepth, 1.0f, 12.f); + GuiSliderBar((Rectangle){ 640, 100, 120, 20}, "Decay", TextFormat("%.2f", branchDecay), &branchDecay, 0.1f, 0.78f); + GuiSliderBar((Rectangle){ 640, 130, 120, 20 }, "Depth", TextFormat("%.0f", treeDepth), &treeDepth, 1.0f, 12.f); GuiSliderBar((Rectangle){ 640, 160, 120, 20}, "Thick", TextFormat("%.0f", thick), &thick, 1, 8); GuiCheckBox((Rectangle){ 640, 190, 20, 20 }, "Bezier", &bezier); //------------------------------------------------------------------------------ @@ -128,10 +135,4 @@ static Vector2 CalculateBranchEnd(Vector2 start, float angle, float length) { start.x + length * sinf(angle), start.y - length * cosf(angle) }; -} - -static void DrawBranch(Vector2 start, float angle, float length, float thick, bool bezier) { - Vector2 end = CalculateBranchEnd(start, angle, length); - if (!bezier) DrawLineEx(start, end, thick, RED); - else DrawLineBezier(start, end, thick, RED); } \ No newline at end of file diff --git a/examples/shapes/shapes_recursive_tree.png b/examples/shapes/shapes_recursive_tree.png index ed7b613b0918fedcec5d78a12d203b405175062e..f8d69f8c70a31ce8aa2208e0354cfe78ca7f2ec5 100644 GIT binary patch literal 18372 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 H`RM-uGvryu literal 38404 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

FTHha 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 x{Vx>kChw^5Kj^*<;2QA-P From f5328bf538ca305f60e00c9f217f8cd827f4e07d Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:46:56 -0300 Subject: [PATCH 4/7] Reduced tree depth from 12 to 10 --- examples/shapes/shapes_recursive_tree.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c index 6b273ac8c880..8a48e1d875e1 100644 --- a/examples/shapes/shapes_recursive_tree.c +++ b/examples/shapes/shapes_recursive_tree.c @@ -65,30 +65,30 @@ int main(void) // Update //---------------------------------------------------------------------------------- float theta = angle * DEG2RAD; - int maxBranches = (int)(powf(2, treeDepth) - 1); + int maxBranches = (int)(powf(2, (int)(treeDepth))); Branch branches[4096]; int count = 0; Vector2 initialEnd = CalculateBranchEnd(start, 0.0f, length); branches[count++] = (Branch){start, initialEnd, 0.0f, length}; - + for (int i = 0; i < count; i++) { Branch branch = branches[i]; if (branch.length < 2) continue; - + float nextLength = branch.length * branchDecay; - + if (count < maxBranches && nextLength >= 2) { Vector2 branchStart = branch.end; - + Vector2 branchEnd1 = CalculateBranchEnd(branchStart, branch.angle + theta, nextLength); Vector2 branchEnd2 = CalculateBranchEnd(branchStart, branch.angle - theta, nextLength); - + branches[count++] = (Branch){branchStart, branchEnd1, branch.angle + theta, nextLength}; branches[count++] = (Branch){branchStart, branchEnd2, branch.angle - theta, nextLength}; } } - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); @@ -105,7 +105,7 @@ int main(void) DrawLine(580, 0, 580, GetScreenHeight(), (Color){ 218, 218, 218, 255 }); DrawRectangle(580, 0, GetScreenWidth(), GetScreenHeight(), (Color){ 232, 232, 232, 255 }); - + // Draw GUI controls //------------------------------------------------------------------------------ GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.0f", angle), &angle, 0, 180); From 568de56366fa28ddf13f2da02428406f88b2a92c Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:49:20 -0300 Subject: [PATCH 5/7] new shapes_recursive_tree.png --- examples/shapes/shapes_recursive_tree.png | Bin 18372 -> 18375 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/shapes/shapes_recursive_tree.png b/examples/shapes/shapes_recursive_tree.png index f8d69f8c70a31ce8aa2208e0354cfe78ca7f2ec5..88932c204bcd24be38c10978b75cda9b002234d8 100644 GIT binary patch delta 9918 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 delta 9883 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 JTy(tuKL9$}us{F+ From e1ce5abfeb4446ef31d5ef5b9a4ba47b32006b26 Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:25:53 -0300 Subject: [PATCH 6/7] follow the conventions --- examples/shapes/shapes_recursive_tree.c | 31 ++++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c index 8a48e1d875e1..385aa6a4291d 100644 --- a/examples/shapes/shapes_recursive_tree.c +++ b/examples/shapes/shapes_recursive_tree.c @@ -48,7 +48,7 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [shapes] example - shapes recursive tree"); - Vector2 start = { (screenWidth / 2.0f) - 125, screenHeight }; + Vector2 start = { (screenWidth/2.0f) - 125.0f, screenHeight }; float angle = 40.0f; float thick = 1.0f; float treeDepth = 10.0f; @@ -64,21 +64,24 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - float theta = angle * DEG2RAD; - int maxBranches = (int)(powf(2, (int)(treeDepth))); - Branch branches[4096]; + + float theta = angle*DEG2RAD; + int maxBranches = (int)(powf(2, (int)(treeDepth))); + Branch branches[1024]; int count = 0; Vector2 initialEnd = CalculateBranchEnd(start, 0.0f, length); branches[count++] = (Branch){start, initialEnd, 0.0f, length}; - for (int i = 0; i < count; i++) { + for (int i = 0; i < count; i++) + { Branch branch = branches[i]; if (branch.length < 2) continue; float nextLength = branch.length * branchDecay; - if (count < maxBranches && nextLength >= 2) { + if (count < maxBranches && nextLength >= 2) + { Vector2 branchStart = branch.end; Vector2 branchEnd1 = CalculateBranchEnd(branchStart, branch.angle + theta, nextLength); @@ -95,9 +98,11 @@ int main(void) ClearBackground(RAYWHITE); - for (int i = 0; i < count; i++) { + for (int i = 0; i < count; i++) + { Branch branch = branches[i]; - if (branch.length >= 2) { + if (branch.length >= 2) + { if (!bezier) DrawLineEx(branch.start, branch.end, thick, RED); else DrawLineBezier(branch.start, branch.end, thick, RED); } @@ -111,7 +116,7 @@ int main(void) GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.0f", angle), &angle, 0, 180); GuiSliderBar((Rectangle){ 640, 70, 120, 20 }, "Length", TextFormat("%.0f", length), &length, 12.0f, 240.0f); GuiSliderBar((Rectangle){ 640, 100, 120, 20}, "Decay", TextFormat("%.2f", branchDecay), &branchDecay, 0.1f, 0.78f); - GuiSliderBar((Rectangle){ 640, 130, 120, 20 }, "Depth", TextFormat("%.0f", treeDepth), &treeDepth, 1.0f, 12.f); + GuiSliderBar((Rectangle){ 640, 130, 120, 20 }, "Depth", TextFormat("%.0f", treeDepth), &treeDepth, 1.0f, 10.f); GuiSliderBar((Rectangle){ 640, 160, 120, 20}, "Thick", TextFormat("%.0f", thick), &thick, 1, 8); GuiCheckBox((Rectangle){ 640, 190, 20, 20 }, "Bezier", &bezier); //------------------------------------------------------------------------------ @@ -130,9 +135,7 @@ int main(void) return 0; } -static Vector2 CalculateBranchEnd(Vector2 start, float angle, float length) { - return (Vector2){ - start.x + length * sinf(angle), - start.y - length * cosf(angle) - }; +static Vector2 CalculateBranchEnd(Vector2 start, float angle, float length) +{ + return (Vector2){ start.x + length*sinf(angle), start.y - length*cosf(angle) }; } \ No newline at end of file From 8b31937dc82ab834c8594c5499fa052d642a2f89 Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:30:19 -0300 Subject: [PATCH 7/7] follow the conventions 2 --- examples/shapes/shapes_recursive_tree.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c index 385aa6a4291d..3ec46de4b609 100644 --- a/examples/shapes/shapes_recursive_tree.c +++ b/examples/shapes/shapes_recursive_tree.c @@ -67,7 +67,7 @@ int main(void) float theta = angle*DEG2RAD; int maxBranches = (int)(powf(2, (int)(treeDepth))); - Branch branches[1024]; + Branch branches[1024] = { 0 }; int count = 0; Vector2 initialEnd = CalculateBranchEnd(start, 0.0f, length); @@ -78,7 +78,7 @@ int main(void) Branch branch = branches[i]; if (branch.length < 2) continue; - float nextLength = branch.length * branchDecay; + float nextLength = branch.length*branchDecay; if (count < maxBranches && nextLength >= 2) {