Bitmap/Midpoint circle algorithm: Difference between revisions
Content added Content deleted
(→{{header|evaldraw}}: evaldraw solution for midpoint circle aka bresenham circle) |
|||
Line 1,020: | Line 1,020: | ||
END PROGRAM |
END PROGRAM |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|Evaldraw}}== |
|||
Gives slightly faster (in some cases), but more importantly prettier circles than the builtin drawsph(x,y,-rad) function. |
|||
<syntaxhighlight lang="C">() |
|||
{ |
|||
cls(0); |
|||
setcol(0xffffff); |
|||
srand(1234); |
|||
for(i=0; i<1000; i++) { |
|||
rad = int( abs(nrnd*10) ); |
|||
x=rnd*xres; |
|||
y=rnd*yres; |
|||
drawcircle(x,y,rad); |
|||
//drawsph(x,y,-rad); |
|||
} |
|||
} |
|||
drawcircle(cx,cy,r) { |
|||
if (cx+r < 0 || cy+r < 0) return; |
|||
if (cx-r > xres || cy-r > yres) return; |
|||
r = int(r); |
|||
if (r<=0) return; |
|||
r2 = r+r; |
|||
x = r; y = 0; |
|||
dy = -2; dx = r2+r2 - 4; |
|||
d = r2-1; |
|||
while(y<=x) { |
|||
setpix(cx-x, cy-y); |
|||
setpix(cx+x, cy-y); |
|||
setpix(cx-x, cy+y); |
|||
setpix(cx+x, cy+y); |
|||
setpix(cx-y, cy-x); |
|||
setpix(cx+y, cy-x); |
|||
setpix(cx-y, cy+x); |
|||
setpix(cx+y, cy+x); |
|||
d += dy; |
|||
dy -= 4; |
|||
++y; |
|||
if (d<0) { |
|||
d += dx; |
|||
dx -= 4; |
|||
--x; |
|||
} |
|||
} |
|||
}</syntaxhighlight> |
|||
=={{header|FBSL}}== |
=={{header|FBSL}}== |
||
'''Using pure FBSL's built-in graphics functions:''' |
'''Using pure FBSL's built-in graphics functions:''' |