电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

直线段的裁剪

直线段的裁剪_第1页
1/8
直线段的裁剪_第2页
2/8
直线段的裁剪_第3页
3/8
实验:直线段的裁剪姓名:龙泽学号: 20141090068 指导教师:吴昊实验内容: 采用 Liang-Barsky算法对直线段进行裁剪。实验设计: 本次实验采用的是Liang-Barsky算法,根据这个算法需先定义直线段的起点坐标 (x1,y1 ),终点坐标(x2,y2 ),以及裁剪框 ( 矩形) 的左边界 (wxl) ,右边界 (wxr) ,上边界 (wyt) ,下边界 (wyb) ,如 void Line_Clipping(float x1, float y1, float x2, float y2,float Wxl,float Wxr,float Wyt,float Wyb),再结合鼠标 mouse函数,实现点击鼠标左键显示矩形框和待裁剪的直线段,点击鼠标右键进行裁剪并显示裁剪过后的直线段,最终显示出来。由于在 Line_Clipping函数下用到了line函数,所以我在上面定义了个line函数来绘制直线段 ( 绘制直线段所采用的算法为Bresenham算法) 。程序代码:#include #include // 初始化 OpenGL场景void myinit (void) { glClearColor (1, 1,1, 0); // 将背景置成白色 glMatrixMode(GL_PROJECTION); gluOrtho2D(0,500,0,500); //设置投影变换,使用正交投影} void setPixel(int x, int y)//在指定位置( x,y)绘制点图元{ glBegin (GL_POINTS); glVertex2i(x,y);//绘制点的坐标 glEnd ( ); } // 绘制直线的方法void line (int x1,int y1,int x2,int y2)//输入线段的两个端点坐标和画线颜色{ int x,y,dx,dy,s1,s2,p,temp,interchange,i; x=x1; y=y1;//设置象素坐标初值 dx=abs(x2-x1); dy=abs(y2-y1);//分别计算之间的差值 if(x2>x1) s1=1; else s1=-1; if(y2>y1) s2=1; else s2=-1; //判断起点和终点的位置,以确定是该加一个单位还是该减一个单位 if(dy>dx)//y方向增长快,将总步数设为 y2-y1 ,每一步的 y 值为 :y=y+1 { temp=dx; dx=dy; dy=temp; interchange=1; } else interchange=0;//x方向增长快,将总步数设为x2-x1 ,每一步的 x 值为:x=x+1 p=2*dy-dx; //设置初始误差判别值 for(i=1;i<=dx;i++) { setPixel(x,y); if(p>=0) { if(interchange==0) y=y+s2; else x=x+1; p=p-2*dx; } if(interchange==0) x=x+s1; else y=y+s2; p=p+2*dy; } } //Liang-Barsky算法int Clip_Top(float p,float q,float &umax,float &umin) { float r=0.0; if(p<0.0) // 线段从裁剪窗口外部延伸到内部, 取最大值 r 并更...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

直线段的裁剪

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部