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

计算机图形学 中心画圆算法 原理及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<0d=d+2*x+1;elsey=y-1;d=d+2*(x-y)+1;endend
end

2903e82d4d4144eebecd8af87d170647.png

53a11f116a1e4560aa2fe23b8aef543b.png

 


http://www.mrgr.cn/news/31824.html

相关文章:

  • HTML文件中引入jQuery的库文件
  • 探索IDE的无限可能:使用技巧与插件推荐
  • Hadoop + Hive + Apache Ranger 源码编译记录
  • PHP大模型深度学习库TransformersPHP 安装体验
  • 领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
  • Yocto - 使用Yocto开发嵌入式Linux系统_13 创建定制层
  • 智慧医院人工智能应用场景 | 智能导诊系统源码
  • MySQL深入原理
  • A-C-E-F四题。2024华为杯建模解题思路:独家出版,思路解析+模型代码。
  • Redis面试真题总结(三)
  • AI入门系列 | 如何优雅地下载最前沿的模型?
  • Spring Cloud 与 Dubbo 的区别及选择指南
  • P1177 【模板】排序
  • 肖扬新书《微权力下的项目管理》读书笔记2
  • Springboot使用ThreadPoolTaskScheduler轻量级多线程定时任务框架
  • 【已解决】编译报错:fatal error: Eigen/Core: 没有那个文件或目录 #include <Eigen/Core>
  • python的多线程
  • Qt (19)【Qt 线程安全 | 互斥锁QMutex QMutexLocker | 条件变量 | 信号量】
  • 轻量级流密码算法Trivium
  • Java模拟鼠标、键盘操作
  • AI少女/HS2甜心选择2 仿崩铁人物卡全合集打包
  • Spring在不同类型之间也能相互拷贝?
  • 【智能大数据分析 | 实验一】MapReduce实验:单词计数
  • 交安安全员考试真题及答案
  • 进程分析工具Process Explorer使用
  • MySQL —— 事务