问题描述
我见过许多绘制圆圈的应用程序,例如python的pygame,javascript的p5.js。但是我找不到有效地找出圆上点的方法。我目前对这个问题的解决方案涉及尝试在正方形上可以刻有圆圈的所有数字。
这不是最有效的方法。在行业级别使用什么方法?它涉及优化还是一种全新的方法?
解决方法
可以使用Midpoint Circle Algorithm。
和一个实现,例如在rosettacode.org的C
中:
#define plot(x,y) put_pixel_clip(img,x,y,r,g,b)
void raster_circle(
image img,unsigned int x0,unsigned int y0,unsigned int radius,color_component r,color_component g,color_component b )
{
int f = 1 - radius;
int ddF_x = 0;
int ddF_y = -2 * radius;
int x = 0;
int y = radius;
plot(x0,y0 + radius);
plot(x0,y0 - radius);
plot(x0 + radius,y0);
plot(x0 - radius,y0);
while(x < y)
{
if(f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x + 1;
plot(x0 + x,y0 + y);
plot(x0 - x,y0 + y);
plot(x0 + x,y0 - y);
plot(x0 - x,y0 - y);
plot(x0 + y,y0 + x);
plot(x0 - y,y0 + x);
plot(x0 + y,y0 - x);
plot(x0 - y,y0 - x);
}
}