2016-01-15 117 views
0

我已經設計,它使用一個圓圈算法方程: (XA)^ 2 +(YB)^ 2 = R^2圓形繪圖算法

下面是一個代碼::::

#include<graphics.h> 
    #include<math.h> 
float rety(int x1,int r1,int a1,int b1) 
{//function simulates (x-a)^2+(y-b)^2=r^2 
float tmp; 
tmp=(x1-a1)*(x1-a1); 
tmp=(r1*r1)-tmp; 
tmp=abs(tmp); 
tmp=sqrt(tmp); 
tmp=tmp+b1; 
return tmp; 
} 
void main() 
{ 
int tmp2,x=0,y=0,r=50,a=200,b=200,gm=DETECT,gd=DETECT; 
initgraph(&gm,&gd,"c://turboc3//bgi"); 
x=a-r;//set x position as left most point of circle 
c1: 
y=rety(x,r,a,b); 
putpixel(x,y,5);//only draws half circle 
tmp2=y-b; 
putpixel(x,b-tmp2,5);//draw symmetric to above half circle 
x=x+1; 
if((x>a+r)==0){goto c1;} 
} 

輸出::::: https://drive.google.com/file/d/0B4kpKF0WrDOQUk9BSm55bjJ0Zm8/view?usp=docslist_api

引用圖像,看到圓圈的左右側出現點狀。

我只是需要幫助,以改善算法,以便這些空格會徹底的預先填充

謝謝,對不起 壞英語。

回答

1

我建議中點圓algorthm,因爲它是非常有效的,並有一個完整的基於整數的版本。以下頁面包含了C代碼函數...

https://en.wikipedia.org/wiki/Midpoint_circle_algorithm

編輯:但是......

有你的算法,因爲它站立的問題是,你總是由1每次迭代遞增x。但有時您需要在同一個x座標上繪製多個像素,因此在左右兩側的圓形曲線幾乎是垂直的。

將算法更改爲有條件地基於y座標增加x。

+0

多數民衆贊成多我不想要.....我不明白中點阿爾戈。它是有效的,但我需要做我的自我....所以我設計了我自己的算法。可以理解我想說什麼 –

+0

家庭作業,明白了。 ;)我修改了上面的答案。 – Wossname

+0

沒錯吧。 ..謝謝你.....我將在成功執行後更新輸出.......順便說一下,我正在爲我的滿意度而努力 –