1. 程式人生 > >中點畫線法畫圓

中點畫線法畫圓

while lose 詳細 ack sin 坐標 mil getc using

中點畫線法已經在畫直線的時候詳細講過了,畫圓時我們也可以用這種方法。畫一個圓心為坐標原點的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 }

中點畫線法畫圓