中点画线法已经在画直线的时候详细讲过了,画圆时我们也可以用这种方法。画一个圆心为坐标原点的1/4圆,然后对其进行简单几何变换,平移对称,就可以得到任意圆。
类似的用中点画线法,从(0,r)点开始,每次要么向右走,要么向右下走,直到x==y,即到达四分之一圆处:
(1)当d<0时,中点在圆内,则取正右方的点,(x+1,y+0.5),此时d=d+2*x+3;
(2) 当d>=0时,中点在圆外,则取右下方的点,(x+1,y-1),此时d=d+2*(x-y)+5;
(3) d0=1-r,即点(0,r)代入圆中的值。
根据上述条件可以得出中点画圆代码(编程环境:codeblacks+EGE库):
1 #include <iostream> 2 #include <graphics.h> 3 using namespace std; 4 //进行对称点打亮 5 void wholeColor(int xc,int yc,int x,int y,int color) 6 { 7 putpixel(xc+x,yc+y,color);putpixel(xc+y,yc+x,color); 8 putpixel(xc-x,yc+y,color);putpixel(xc-y,yc+x,color); 9 putpixel(xc+x,yc-y,color);putpixel(xc+y,yc-x,color); 10 putpixel(xc-x,yc-y,color);putpixel(xc-y,yc-x,color); 11 } 12 //画圆 13 void circle(int xc,int yc,int r,int color) 14 { 15 int x=0,y=r,d=1-r; 16 wholeColor(xc,yc,x,y,color); 17 while(x<=y) 18 { 19 if(d<0) //走正右方 20 { 21 d+=2*x+3; 22 x++; 23 }else{ //走右下方 24 25 d+=2*(x-y)+5;x++;y--; 26 } 27 wholeColor(xc,yc,x,y,color); 28 } 29 } 30 31 int main() 32 { 33 initgraph(640,480); //图形库初始化 34 circle(200,300,56,RED); //中点坐标和半径,颜色 35 getch(); //等待用户操作 36 closegraph(); //关闭图形 37 return 0; 38 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 20250116 支付宝出现重大事故 有感
· 一个基于 Roslyn 和 AvalonEdit 的跨平台 C# 编辑器
· 2025 最佳免费商用文本转语音模型: Kokoro TTS
· 海康工业相机的应用部署不是简简单单!?
· 在 .NET Core中如何使用 Redis 创建分布式锁