我有畫一個圓圈下面的代碼:布氏圈算法
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
void main()
{
int xc, yc, x, y, p[100], r, k;
int gdriver=DETECT, gmode, errorcode;
printf("\nEnter the center point(xc,yc): ");
scanf("%d%d", &xc, &yc);
printf("\nEnter the radius: ");
scanf("%d", &r);
printf("\nPlotting...\n");
sleep(5);
clrscr();
initgraph(&gdriver, &gmode, "");
p[0]=1-r;
x=0;
y=r;
for(k=0;k<=y;k++)
{
putpixel(xc+x, yc+y, 9);
putpixel(xc-x, yc-y, 9);
putpixel(xc+x, yc-y, 9);
putpixel(xc-x, yc+y, 9);
putpixel(xc+y, yc+x, 9);
putpixel(xc-y, yc-x, 9);
putpixel(xc+y, yc-x, 9);
putpixel(xc-y, yc+x, 9);
if(p[k]>0)
{
p[k+1]= p[k]+ 2*(x+1)+1-2*(y+1);
x++;
y--;
}
else
{
p[k+1]=p[k]+2*(x+1)+1;
x++;
}
}
getch();
}
這部分代碼:
putpixel(xc+x, yc+y, 9);
putpixel(xc-x, yc-y, 9);
putpixel(xc+x, yc-y, 9);
putpixel(xc-x, yc+y, 9);
putpixel(xc+y, yc+x, 9);
putpixel(xc-y, yc-x, 9);
putpixel(xc+y, yc-x, 9);
putpixel(xc-y, yc+x, 9);
主要是對相對於圓形繪製點,它的工作原理因爲圓的對稱性。
但我無法弄清楚這部分代碼正在做什麼;
if(p[k]>0)
{
p[k+1]= p[k]+ 2*(x+1)+1-2*(y+1);
x++;
y--;
}
else
{
p[k+1]=p[k]+2*(x+1)+1;
x++;
}
任何人都可以解釋我做了什麼嗎? 在此先感謝。
線條不清楚'這裏的技巧基本上是每次增加x,每當距離太遠時就向下移動一行。 這裏有一些謹慎的因素。如果你想呆在理論圈之外,這就是發生在這裏的情況,那麼你應該檢查是否向下移動y尺度不會使偏差爲負。「你能更清楚一點嗎? – sriram
@GroovyUser我試圖讓它更清晰一點。我會稍後回顧並更新wiki文章,但在此之前,請告知我是否還有其他要點不清楚(或者應該添加的其他內容) –
@foo bah:您說過:在每種情況下,你必須計算每個點偏離圓的距離。我想這個算法是用來繪製一個圓的,但是如何計算每一個偏離圓的點,而不是先繪製它?希望我的問題對你很清楚。 –