由于我们使用的只是d的符号,而且d的增量都是整数,只是其初始值包含小数。因此,我们可以用2d代替d,来摆脱小数,写出仅包含整数运算的算法:
void MidpointLine(x1,y1,x2,y2,color) int x1,y1,x2,y2,color; { int a,b,d1,d2,dx,y; a=y1-y2; b=x2-x1; d=2*a+b; d1=2*a; d2=2*(a+b); x=x1; y=y1;
setpixel(x,y,color); while(x<x2) { If(d<0) {x++;y++d+=d2;} else {x++;d+=d1;} setpixel(x,y,color); }
2.1.3 Bresenham 画线算法
算法分析
算法推导
可视化效果图
2.1.4 图形环境的设置
1.2 计算机图形学的发展
1.2.1 计算机图形学的发展简史 50年代准备阶段 60年代发展阶段 70年代推广应用阶段 80年代系统实用化阶段 90年代标准化智能化阶段
1.2.2 计算机图形学的发展方向 造型技术的发展 真实图形生成技术的发展 人—机交互技术的发展 模拟艺术的仿真 计算机动画
另外,为了方便起见,我们只考虑中心在原点,半径为整数R的圆x2+y2=R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标。
1.3 计算机图形学的应用
1.用户接口 2.计算机辅助设计与制造(CAD/CAM) 3.地形地貌和自然资源图 4.计算机动画和艺术 5.件 计算机图形系统软件 计算机图形显示原理 光栅扫描式图形显示器