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

直线段的裁剪VIP免费

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

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

碎片内容

直线段的裁剪

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群