计算机图形学 中心画圆算法 原理及matlab代码实现
中心画圆算法原理
总体思路:
将圆划分为八部分,先通过di=F(xi+1,yi-0.5)和隐函数F=x2+y2-R2绘制八分之一的圆,然后通过圆的对称性确定另外七个部分的相应坐标绘制完整的圆。
求中点误差项递推公式:
从(x0,y0+r)开始,因绘制的圆弧上各点切线|k|<1,所以主位移方向为x方向,则x每次加一,而y取决于中点误差项di的值。
当di<0,选距离圆弧最近的上一个像素点,则yi+1=yi;
当di≥0,选距离圆弧最近的下一个像素点,则yi+1=yi-1
将其对应的中点代入圆的隐函数中得到中点误差项递推公式:
对于递推公式使用循环,对于分段函数使用条件语句。
求初始值:
将起始点(x0,y0+R)的对应中点坐标(x0+1,y0-0.5)代入隐函数,得到d0=1.25-R。
整数化:
仅d0为小数,令e0=d0-0.25,则e0=1-R。
Matlab代码截图及运行结果截图
function MidpointCircle(x0,y0,r)
%初始值
x=0;
y=r;
d=1-r;
while x<y%判断是否还在要绘制的八分之一圆内
%根据八分之一圆对称性绘制整圆
plot(x+x0,y+y0,'rs');hold on;
plot(-x+x0,y+y0,'rs');hold on;
plot(x+x0,-y+y0,'rs');hold on;
plot(-x+x0,-y+y0,'rs');hold on;
plot(y+x0,x+y0,'rs');hold on;
plot(-y+x0,x+y0,'rs');hold on;
plot(y+x0,-x+y0,'rs');hold on;
plot(-y+x0,-x+y0,'rs');hold on;
%根据中点误差项递推公式绘制八分之一圆
x=x+1;
if d<0
d=d+2*x+1;
else
y=y-1;
d=d+2*(x-y)+1;
end
end
end