欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    计算机图形学实验报告 课程设计 大作业.docx

    • 资源ID:17959292       资源大小:29.20KB        全文页数:22页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机图形学实验报告 课程设计 大作业.docx

    1、计算机图形学实验报告 课程设计 大作业安徽建筑工业学院计算机图形学 实验报告院(系)名称: 专 业: 班 级: 姓 名: 学 号: 指 导 老 师: 实验一 实现任意直线的中点画线算法【实验目的】 掌握直线的中点画线算法;【实验环境】VC+6.0【实验内容】 利用任意的一个实验环境,编制源程序,实现直线的中点画线法。【实验原理】 假定直线斜率k在01之间,当前象素点为(xp,yp),则下一个象素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1)。若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;

    2、当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理。 图2.1.2 中点画线法每步迭代涉及的象素和中点示意图下面讨论中点画线法的实现。过点(x0,y0)、(x1, y1)的直线段L的方程式为F(x, y)=ax+by+c=0,其中,a=y0-y1, b=x1-x0, c=x0y1-x1y0,欲判断中点M在Q点的上方还是下方,只要把M代入F(x,y),并判断它的符号即可。为此,我们构造判别式:d=F(M)=F(xp+1, yp+0.5)=a(xp+1)+b(yp+0.5)+c 当d0时,M在L(Q点)上方,取P1为下一个象素; 当d=0时,选P1或P2均可,约定取P1为下一个象

    3、素;注意到d是xp, yp的线性函数,可采用增量计算,提高运算效率。 若当前象素处于d0情况,则取正右方象素P1(xp+1, yp),要判下一个象素位置,应计算 d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a,增量为a。 若d0时,则取右上方象素P2(xp+1, yp+1)。要判断再下一象素,则要计算d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ,增量为ab。画线从(x0, y0)开始,d的初值 d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b,因 F(x0, y0)=0,所以d0=a+0.5

    4、b。由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数运算的算法程序。【实验程序】void Midpoint Line (int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y; a=y0-y1; b=x1-x0;d=2*a+b; d1=2*a;d2=2* (a+b); x=x0;y=y0; drawpixel(x, y, color); while (xx1) if (d0) x+;y+; d+=d2; else x+; d+=d1; drawp

    5、ixel (x, y, color); /* while */ /* mid PointLine */举例:用中点画线方法扫描转换连接两点P0(0,0)和P1(5,2)的直线段。a=y0-y1=-2; b=x1-x0=5; d0=2*a+b=1;d1=2*a=-4;d2=2*(a+b)=6 ,x y d 0 0 1 1 0 -32 1 3 3 1 -1 42 552 152.1.3 中点画线法实验二 实现任意一种线段的裁剪算法以及多边形裁剪算法【实验目的】1、 掌握直线段裁剪的基本原理;2、 掌握多边形裁剪的基本原理;【实验环境】VC+6.0【实验内容】编制程序,完成直线段和多边形的裁减过程。

    6、【实验原理】1算法基本思想对每条直线段p1(x1,y1)p2(x2,y2)分三种情况处理:(1) 直线段完全可见,“简取”之。(2) 直线段完全不可见,“简弃”之。(3) 直线段既不满足“简取”的条件,也不满足“简弃”的条件,需要对直线段按交点进行分段,分段后重复上述处理。2算法步骤(1) 编码对于任一端点(x,y),赋予一个4 位的二进制码D3D2D1D0。编码规则如下:若xwxr,则D1=1,否则D1=0;若ywyt,则D3=1,否则D3=0。(2) 裁剪先求出端点p1 和p2 的编码code1 和code2,然后:若code1|code2=0,对直线段应简取之。若code1&code20

    7、,对直线段可简弃之。若上述两条件均不成立。则需求出直线段与窗口边界的交点。在交点处把线段一分为二,其中必有一段完全在窗口外,可以弃之。再对另一段重复进行上述处理,直到该线段完全被舍弃或者找到位于窗口内的一段线段为止。(3) 求交假定直线的端点坐标为(x1,y1)和(x2,y2)左、右边界交点的计算上、下边界交点的计算。3算法实现(1) 输入直线段的两端点坐标:p1(x1,y1)、p2(x2,y2),以及窗口的四条边界坐标:wyt、wyb、wxl 和wxr。(2) 对p1、p2 进行编码:点p1 的编码为code1,点p2 的编码为code2。(3) 若code1|code2=0,对直线段应简取

    8、之,转(6);否则,若code1&code20,对直线段可简弃之,转(7);当上述两条均不满足时,进行步骤(4)。(4) 确保p1 在窗口外部:若p1 在窗口内,则交换p1 和p2 的坐标值和编码。(5) 按左、右、上、下的顺序求出直线段与窗口边界的交点,并用该交点的坐标值替换p1 的坐标值。也即在交点s 处把线段一分为二,并去掉p1s 这一段。考虑到p1 是窗口外的一点,因此可以去掉p1s。转(2)。(6) 用直线扫描转换算法画出当前的直线段p1p2。(7) 算法结束。【实验程序】一:Cohen-Sutherland线段裁剪算法#include /#include /* SetPixel()

    9、 */#include #include /const winLeftBitCode=0x1;const winRightBitCode=0x2;const winBottomBitCode=0x4;const winTopBitCode=0x8;/class wcPt2D public:GLfloat x,y; ;/inline int inside(int code)return int (!code);/inline int reject(int code1,int code2) return int (code1&code2);/inline int accept(int code1,

    10、int code2) return int (!(code1|code2);/GLubyte encode(wcPt2D pt,wcPt2D winMin,wcPt2D winMax) GLubyte code=0x00; if(pt.xwinMax.x) code=code+winRightBitCode; if(pt.ywinMax.y) code=code|winTopBitCode; return (code);/void swapPts(wcPt2D *p1,wcPt2D *p2) wcPt2D tmp; tmp=*p1; *p1=*p2; *p2=tmp;/void swapCod

    11、es(GLubyte *c1,GLubyte *c2) GLubyte tmp; tmp=*c1; *c1=*c2;*c2=tmp;/void draw_pixel(int ix,int iy/*,int value*/) glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd();/int inline round(const float a)return int (a+0.5);/void lineDDA(int x0,int y0,int x_end,int y_end,double a,double b,double c) glColor3f(a,b,

    12、c); int dx=x_end-x0; int dy=y_end-y0; int steps,k; float xIncrement,yIncrement,x=x0,y=y0; if(abs(dx)abs(dy) steps=abs(dx); else steps=abs(dy); xIncrement=float (dx)/float (steps); yIncrement=float (dy)/float (steps); draw_pixel(round(x),round(y); for (k=0;ky = clipboundary0.y; intersectpt-x = p1.x +

    13、 (clipboundary0.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y); else /* 垂直边界 */ intersectpt-x = clipboundary0.x; intersectpt-y = p1.y + (clipboundary0.x-p1.x)*(p2.y-p1.y)/(p2.x-p1.x); int inside(testvertex, clipboundary)vertex testvertex, *clipboundary;/* 如果顶点testvertex在窗口边界clipboundary的内部,那么返回TRUE;否则返回FALSE */ if

    14、 ( clipboundary1.x clipboundary0.x ) /* 上边界 */ if ( testvertex.y clipboundary0.x ) /* 下边界 */ if ( testvertex.y = clipboundary0.y ) return TRUE; if ( clipboundary1.y clipboundary0.y ) /* 右边界 */ if ( testvertex.x = clipboundary0.x ) return TRUE; if ( clipboundary1.y clipboundary0.y ) /* 左边界 */ if ( te

    15、stvertex.y = clipboundary0.x ) return TRUE; return FALSE;outputvertex(outvertex, outlength, outvertexlist)vertex outvertex;int *outlength;vertex *outvertexlist/* 向输出顶点序列中输出顶点outvertex */ outvertexlist*outlength = outvertex; (*outlength)+;void Sutherland_Hodgman_Polygon_Clipping(invertexlist, outvert

    16、exlist, inlength, outlength, clipboundary)vertex *invertexlist, *outvertexlist;int inlength, *outlength;vertex *clipboundary;/* invertexlist为输入顶点序列,inlength为输入序列长度;outvertexlist为输出顶点序列,outlenght中返回输出序列长度;clipboundary为窗口边界 */ vertex s, p, i; int j; *outlength = 0; s = invertexlistinlength-1; /* 输入顶点序列的最后一个顶点 */ for ( j=0; jinlength; j+ ) p = invertexlistj; if ( inside(p,clip


    注意事项

    本文(计算机图形学实验报告 课程设计 大作业.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开