自学内容网 自学内容网

计算机图形学 中心画圆算法 原理及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

将其对应的中点代入圆的隐函数中得到中点误差项递推公式:

b40a7b64ccda4881b9c9bf6293c0d362.png

对于递推公式使用循环,对于分段函数使用条件语句。

求初始值

将起始点(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

2903e82d4d4144eebecd8af87d170647.png

53a11f116a1e4560aa2fe23b8aef543b.png

 


原文地址:https://blog.csdn.net/2301_78066243/article/details/142173347

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!