From fb2d6958cd91cf28d8f1580b09db0aa7fd964456 Mon Sep 17 00:00:00 2001 From: Monjaris Date: Sat, 4 Apr 2026 21:42:11 +0400 Subject: [PATCH] Added shapes_collision_ellipses example --- examples/shapes/shapes_collision_ellipses.c | 138 ++++++++++++++++++ examples/shapes/shapes_collision_ellipses.png | Bin 0 -> 29191 bytes 2 files changed, 138 insertions(+) create mode 100644 examples/shapes/shapes_collision_ellipses.c create mode 100644 examples/shapes/shapes_collision_ellipses.png diff --git a/examples/shapes/shapes_collision_ellipses.c b/examples/shapes/shapes_collision_ellipses.c new file mode 100644 index 000000000..56d95a2f7 --- /dev/null +++ b/examples/shapes/shapes_collision_ellipses.c @@ -0,0 +1,138 @@ +/******************************************************************************************* +* +* raylib [shapes] example - collision ellipses +* +* Example complexity rating: [★★☆☆] 2/4 +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +********************************************************************************************/ + +#include "raylib.h" +#include + +// Check if point is inside ellipse +static bool CheckCollisionPointEllipse(Vector2 point, Vector2 center, float rx, float ry) +{ + float dx = (point.x - center.x) / rx; + float dy = (point.y - center.y) / ry; + return (dx*dx + dy*dy) <= 1.0f; +} + +// Check if two ellipses collide +// Uses radial boundary distance in the direction between centers — scales correctly with radii +static bool CheckCollisionEllipses(Vector2 c1, float rx1, float ry1, Vector2 c2, float rx2, float ry2) +{ + float dx = c2.x - c1.x; + float dy = c2.y - c1.y; + float dist = sqrtf(dx*dx + dy*dy); + + // Ellipses are on top of each other + if (dist == 0.0f) return true; + + float theta = atan2f(dy, dx); + float cosT = cosf(theta); + float sinT = sinf(theta); + + // Radial distance from center to ellipse boundary in direction theta + // r(theta) = (rx * ry) / sqrt((ry*cos)^2 + (rx*sin)^2) + float r1 = (rx1 * ry1) / sqrtf((ry1*cosT)*(ry1*cosT) + (rx1*sinT)*(rx1*sinT)); + float r2 = (rx2 * ry2) / sqrtf((ry2*cosT)*(ry2*cosT) + (rx2*sinT)*(rx2*sinT)); + + return dist <= (r1 + r2); +} + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 1200; + const int screenHeight = 840; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision ellipses"); + SetTargetFPS(60); + + Vector2 ellipseACenter = { (float)screenWidth/4, (float)screenHeight/2 }; + float ellipseARx = 120.0f; + float ellipseARy = 70.0f; + + Vector2 ellipseBCenter = { (float)screenWidth*3/4, (float)screenHeight/2 }; + float ellipseBRx = 90.0f; + float ellipseBRy = 140.0f; + + // 0 = controlling A, 1 = controlling B + int controlled = 0; + + Color bgColor = { 16, 12, 21, 255 }; + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) + { + // Update + //---------------------------------------------------------------------------------- + if (IsKeyPressed(KEY_A)) controlled = 0; + if (IsKeyPressed(KEY_B)) controlled = 1; + + if (controlled == 0) ellipseACenter = GetMousePosition(); + else ellipseBCenter = GetMousePosition(); + + bool ellipsesCollide = CheckCollisionEllipses( + ellipseACenter, ellipseARx, ellipseARy, + ellipseBCenter, ellipseBRx, ellipseBRy + ); + + bool mouseInA = CheckCollisionPointEllipse(GetMousePosition(), ellipseACenter, ellipseARx, ellipseARy); + bool mouseInB = CheckCollisionPointEllipse(GetMousePosition(), ellipseBCenter, ellipseBRx, ellipseBRy); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(bgColor); + + DrawEllipse((int)ellipseACenter.x, (int)ellipseACenter.y, + ellipseARx, ellipseARy, + ellipsesCollide ? RED : BLUE); + + DrawEllipse((int)ellipseBCenter.x, (int)ellipseBCenter.y, + ellipseBRx, ellipseBRy, + ellipsesCollide ? RED : GREEN); + + DrawEllipseLines((int)ellipseACenter.x, (int)ellipseACenter.y, + ellipseARx, ellipseARy, WHITE); + + DrawEllipseLines((int)ellipseBCenter.x, (int)ellipseBCenter.y, + ellipseBRx, ellipseBRy, WHITE); + + DrawCircleV(ellipseACenter, 4, WHITE); + DrawCircleV(ellipseBCenter, 4, WHITE); + + if (ellipsesCollide) DrawText("ELLIPSES COLLIDE", screenWidth/2 - 120, 40, 28, RED); + else DrawText("NO COLLISION", screenWidth/2 - 80, 40, 28, DARKGRAY); + + // Controlled ellipse indicator + DrawText(controlled == 0 ? "Controlling: A" : "Controlling: B", + 20, screenHeight - 40, 20, YELLOW); + + if (mouseInA && controlled != 0) DrawText("Mouse inside ellipse A", 20, screenHeight - 70, 20, BLUE); + if (mouseInB && controlled != 1) DrawText("Mouse inside ellipse B", 20, screenHeight - 70, 20, GREEN); + + DrawText("Press [A] or [B] to switch control", 20, 20, 20, GRAY); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/shapes/shapes_collision_ellipses.png b/examples/shapes/shapes_collision_ellipses.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0e38b0b8297bc65227fd5fc5d1d706ab83a744 GIT binary patch literal 29191 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⁡#w&A$1Z*Qj6k!&eX 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 literal 0 HcmV?d00001