图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);