中点画线法画圆

Posted 浮生缘,半生梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中点画线法画圆相关的知识,希望对你有一定的参考价值。

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

 

以上是关于中点画线法画圆的主要内容,如果未能解决你的问题,请参考以下文章

图形学--(中点画线法+Bresenham画线算法)

扫描转换算法——DDA中点画线画圆椭圆

计算机图形学中的中点画线,中点画圆,Bresenham画线与画圆算法

OpenGL学习进程(13)第十课:基本图形的底层实现及算法原理

用C++如何实现bresenham画线算法?计算机图形学上面有个drawpixel的函数。不知道怎么用。

在ArcGIS中怎么画圆