定义圆的第二种方法利用极坐标, 如图所示:
x = r cosθy = r sinθ其中θ=当前角度r =圆半径x = x坐标y = y坐标
通过这种方法, θ从0步进到
文章图片
&计算x和y的每个值。
文章图片
算法 步骤1:设置初始变量:
r =圆半径(h, k)=圆心坐标i =步长θ_end=θ= 0
步骤2:如果θ> θ, 则停止。
第三步:计算
x = r * cosθy = r * sin?θ
步骤4:在当前(x, y)坐标上绘制对称找到的八个点, 即中心(h, k)。
图(x + h, y + k)图(-x + h, -y + k)图(y + h, x + k)图(-y + h, -x + k)图(-y + h , x + k)图(y + h, -x + k)图(-x + h, y + k)图(x + h, -y + k)
步骤5:递增θ=θ+ i
步骤6:转到步骤(ii)。
程序使用极坐标画一个圆:
#include <
graphics.h>
#include <
stdlib.h>
#define color 10void eightWaySymmetricPlot(int xc, int yc, int x, int y){ putpixel(x+xc, y+yc, color);
putpixel(x+xc, -y+yc, color);
putpixel(-x+xc, -y+yc, color);
putpixel(-x+xc, y+yc, color);
putpixel(y+xc, x+yc, color);
putpixel(y+xc, -x+yc, color);
putpixel(-y+xc, -x+yc, color);
putpixel(-y+xc, x+yc, color);
}void PolarCircle(int xc, int yc, int r){ int x, y, d;
x=0;
y=r;
d=3-2*r;
eightWaySymmetricPlot(xc, yc, x, y);
while(x<
=y) {if(d<
=0){d=d+4*x+6;
}else{d=d+4*x-4*y+10;
y=y-1;
}x=x+1;
eightWaySymmetricPlot(xc, yc, x, y);
}}int main(void){ int gdriver = DETECT, gmode, errorcode;
int xc, yc, r;
initgraph(&
gdriver, &
gmode, "c:\\turboc3\\bgi");
errorcode = graphresult();
if (errorcode != grOk) {printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}printf("Enter the values of xc and yc , that is center points of circle : ");
scanf("%d%d", &
xc, &
yc);
printf("Enter the radius of circle : ");
scanf("%d", &
r);
PolarCircle(xc, yc, r);
getch();
closegraph();
return 0;
}
【使用极坐标定义一个圆】输出:
文章图片
推荐阅读
- 使用多项式方法定义一个圆
- 计算机图形(定义一个圆)
- 计算机图形(布雷森汉姆线算法)
- 计算机图形DDA算法
- 计算机图形(扫描转换直线)
- 计算机图形: 扫描转换点
- 计算机图形(扫描转换定义)
- 计算机图形绘图仪
- 计算机图形之图像扫描仪