计算机图形学-设计算法绘制直线与圆 下载本文

图2.5.4 Bresenham画线算法当1>k>0时运行结果截图

图2.5.5 Bresenham画线算法当k<-1时运行结果截图

图2.5.6 Bresenham画线算法当k<-1时运行结果截图

- 20 -

图2.5.7 Bresenham画线算法当-1

图2.5.8 Bresenham画线算法当-1

Bresenham画圆:

图2.5.9 Bresenham画圆算法运行结果截图

- 21 -

图2.5.10 Bresenham画圆算法运行结果截图

?实验题三

3.1实验题目

自学椭圆的Bresenham生成算法,利用对称性将该算法程序推广到任一四分圆,从而形成一般的Bresenham画椭圆算法。并上机编程画出一个圆心在点(xc, yc);沿x轴方向的长半轴长度为a, 沿y轴方向的短半轴长度为b; 圆周颜色为color的椭圆。要求:(1)椭圆心的坐标、长半轴长度为a、短半轴长度为b和圆周颜色color都要求可以随机输入;(2)要求利用文本输出函数显示出所画椭圆的圆心。

3.2实验目的和意义

1. 自学椭圆的Bresenham生成算法

2. 利用对称性将该算法程序推广到任一四分圆,编写一般的Bresenham画椭圆算法 3.熟悉并掌握椭圆弧的画法,并拓展到整个8分椭圆。

3.3程序制作步骤(包括算法思想、算法流程图等)

1. 输入椭圆的长半轴a和短半轴b。

2. 计算初始值d?b2?a2?(-b?0.25),x?0,y?b。 3. 绘制点(x,y)及其在四分象限上的另外3个对称点。

4. 判断d的符号。若d?0,则先将d更新为d?b2?(2x?3),再将 (x,y)更新为

(x?1,y);否则先将d更新为d?b2?(2x?3)?a2?(?2y?2),再将(x,y)更新为

- 22 -

(x?1,y-1)。

5. 当b2?(x?1)?a2?(y?0.5)时,重复步骤(3)和(4),否则转到步骤(6)。 6. 用上半部分计算的最后点(x,y)来计算下半部分中d的初值:

d?b2?(x?0.5)2?a2?(y?1)2?a2?b2

7. 绘制点(x,y)及其在四分象限上的另外3个对称点。

8. 判断d的符号。若d?0,则先将d更新为d?b2?(2xi?2)?a2?(?2yi?3), 再将

(x,y)更新为(x?1,y-1);否则先将d更新为d?a2?(?2yi?3),再将(x,y)更新为

(x,y-1)。

9. 当y?0, 重复步骤(7)和(8),否则结束。

3.4主程序

#include \#include \#include \

void Bresenham_Ciecle(int a,int b,int p,int q,int c) {

putpixel(p,q,c);

int x=0; int y=b;

double dt=b*b+a*a*(-b+0.25); putpixel(x+p,y+q,c);

while( b*b*(x+1) < a*a*(y-0.5)) {

if(dt<0) { }

- 23 -

dt+=b*b*(2*x+3);