1、实验目的与要求
目的:通过本次实验,完成矢量线性多边形向栅格数据的转化过程;
要求:采用VC++6.0实现。
2、实验方法
采用Bresenham算法实现
3、实验材料
直线的定义:y = x/3, 起点为(0, 0),终点为(12, 4);
网格坐标要求:网格分辨率为0.2,网格起点同直角坐标系原点相同
4、实验结果
程序运行的结果,要依次输出栅格单元的栅格坐标
注意事项:本实验中,栅格的分辨率同实际坐标不等,注意格子单位的输出过程以及矢量坐标向格子坐标的转化。
5、程序源代码
1 //采用Bresenham算法实现完成矢量线性多边形向栅格数据的转化过程 2 3 #include<stdio.h> 4 //Bresenham函数 5 //其中(x0,y0)是起点,(x1,y1)是终点,k是斜率,pixel是网格分辨率 6 void Bresenham(int x0,int y0,int x1,int y1,float k,float pixel) 7 { 8 int x,y; 9 float e; 10 e=-0.5; 11 x=x0; 12 y=y0; 13 for(x=x0;x<=(x1/pixel);x++) 14 { 15 e=e+k; 16 if(e>0) 17 { 18 y++; 19 e=e-1; 20 } 21 22 printf("x=%d y=%d",x,y); 23 printf(" "); 24 } 25 } 26 27 void main() 28 { 29 //调用Bresenham函数 30 Bresenham(0,0,12,4,1.0/3.0,0.2); 31 32 }
六、运行结果
特别注意:float k=1/3,这时的k是0,涉及到一个类型转换问题。必须使用float k=1.0/3.0,这里的k才是0.33333...。
石头
2014年11月27日