Browse Source

Create Example_-_BruteForceCircleFill2.c

Rudy Boudewijn van Etten 4 years ago
parent
commit
aceda0abe4
1 changed files with 75 additions and 0 deletions
  1. 75 0
      Example_-_BruteForceCircleFill2.c

+ 75 - 0
Example_-_BruteForceCircleFill2.c

@@ -0,0 +1,75 @@
+//
+// Draw a Filled circle using brute force.
+//
+
+#include "raylib.h"
+
+void bruteforcecircle(int xc, int yc, int r,Color col);
+
+int main(void)
+{
+    // Initialization
+    //--------------------------------------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+
+    InitWindow(screenWidth, screenHeight, "raylib example.");
+ 
+    SetTargetFPS(10);               // Set our game to run at 60 frames-per-second
+    //--------------------------------------------------------------------------------------
+
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        
+        
+        //----------------------------------------------------------------------------------
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+
+            ClearBackground(RAYWHITE);
+            for(int i=0;i<20;i++){
+                int x = GetRandomValue(0,screenWidth);
+                int y = GetRandomValue(0,screenHeight);
+                int r = GetRandomValue(10,100);
+                bruteforcecircle(x,y,r,RED);
+            }
+
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+
+    return 0;
+
+
+}
+
+void bruteforcecircle(int xc, int yc, int radius,Color col) { 
+//    for(int y=-radius; y<=radius; y++){
+//    for(int x=-radius; x<=radius; x++){
+//        if(x*x+y*y <= radius*radius)
+//            DrawPixel(xc+x, yc+y,col);
+//    }}
+
+// Single Loop version ; Said to be 2x speed than double loop method.
+int r2 = radius * radius;
+int area = r2 << 2;
+int rr = radius << 1;
+
+for (int i = 0; i < area; i++)
+{
+    int tx = (i % rr) - radius;
+    int ty = (i / rr) - radius;
+
+    if (tx * tx + ty * ty <= r2)
+        DrawPixel(xc + tx, yc + ty, col);
+}
+}