随笔- 107  文章- 0  评论- 6  阅读- 96196 

    中点画线法已经在画直线的时候详细讲过了,画圆时我们也可以用这种方法。画一个圆心为坐标原点的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 }
复制代码

 

 posted on   几缕清风依旧  阅读(1482)  评论(0编辑  收藏  举报
编辑推荐:
· 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 创建分布式锁
点击右上角即可分享
微信分享提示