码迷,mamicode.com
首页 > 其他好文 > 详细

中点画线法画圆

时间:2017-09-16 00:38:31      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:getch   用户操作   class   name   pix   详细   圆心   black   颜色   

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

 

中点画线法画圆

标签:getch   用户操作   class   name   pix   详细   圆心   black   颜色   

原文地址:http://www.cnblogs.com/llsq/p/7529173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!