当前位置: 首页 > article >正文

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

 


http://www.kler.cn/news/314772.html

相关文章:

  • 『功能项目』QFrameWorkBug拖拽功能【66】
  • SpringBootWeb增删改查入门案例
  • C语言实现常见的数据结构
  • 计算机毕业设计 数字化农家乐管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 发票OFD格式转换成PDF
  • Java 使用递归方法遍历B站下载文件并解析重命名
  • Linux(ubuntu)(文件IO——fopen)
  • C++ | C++中与const相关的权限放大和缩小详解
  • 【医疗大数据】基于 B2B 的医疗保健系统中大数据信息管理的安全和隐私问题分析
  • Spring(三)Spring事件+计划任务+条件注解+SpringAware
  • 开源网安多城联动、多形式开展网安周公益活动,传播网络安全知识
  • 中断-MCU
  • HTML粉色烟花秀
  • python新手的五个练习题
  • MySQl索引事务(B树)
  • 基于 K8S kubernetes 的常见日志收集方案
  • 大模型如何学习数据
  • NLP 文本分类核心问题
  • LangChain教程 - 构建一个检索增强生成 (RAG) 应用程序
  • 面试金典题8
  • go webapi上传文件
  • 【Linux】Docker:离线主机部署
  • 【Temporal】日志打印控制
  • 【AI视频】AI虚拟主播制作网站推荐
  • 深度学习02-pytorch-06-张量的形状操作
  • 基于深度学习的智能电网优化
  • Java异常架构与异常关键字
  • Spring后端直接用枚举类接收参数,自定义通用枚举类反序列化器
  • IT行业:未来发展的无限可能
  • 【医学半监督】置信度指导遮蔽学习的半监督医学图像分割