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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 g^#9p!1L;wH) literal 0 HcmV?d00001