计算机图形学-图形的几何变换.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学-图形的几何变换

贵州大学实验报告 学院:计算机科学与技术 专业:软件工程 班级:软件132 姓名 常伟 学号 1308060226 实验地点 一教704 实验时间 2016.5.9 指导教师 李智 实验成绩 实验项目名称 试验四、图形的几何变换 实验目的 掌握矢量运算。 熟练使用齐次坐标。 掌握采用齐次坐标进行几何变换。 实验要求 理解几何图形变换的原理,编程实现图形的几何变换。 编程界面友好,实现变换的所有方式,包括平移、缩放、旋转、对称、错切以及基本变换基础上的组合变换。 几何变换使用矩阵进行运算。 实验原理 二维齐次坐标变换的矩阵的形式是 这个矩阵的每一个元素都是有特殊含义的。其中,可以对图形进行缩放、旋转、对称和错切等变换;是对图形进行平移变换;是对图形作投影变换;则是对图形进行缩放变换。 下面给出几个基本变换的矩阵运算。 1.平移变换 2.缩放变换 3.旋转矩阵 4.对称矩阵 对称变换其实只是a、b、d、e取0、1等特殊值产生的一些特殊效果。 5.错切变换 (1)当d=0时,图形的y坐标不变,x坐标随初值(x,y)及变换系数b作线性变化。 (2)当b=0时,图形的x坐标不变,y坐标随初值(x,y)及变换系数d作线性变化。 实验步骤 1.设计图形界面。本实验使用visual studio 2012 C#搭建窗口,设置相应的组件。如下图。 如图所示,combox此时显示的字符是“平移”,在其下面显示的是关于平移的操作组件。当选择combox的不同项时,其下面就显示对应的操作组件。 2.运行效果如下。 (1)平移 从图中可见,原图形的颜色为黄绿色,平移后的图形为黑色。 (2)旋转 (3)对称 如图,这是原图形关于x轴对称后由对称后的图形关于原点对称得到的图形。在界面中可看到一个text为“新变换”的checkbox,其作用是可以自由选择变换原图形或者变换变换后的图形。 (4)缩放 有图可知,此时的x、y的缩放比例都是0.5,也就是原图形的x和y都关于原点缩小为原来的一半。 (5)错切 此时y上的错切系数为0,即图形的y值不变,x的值随x上的错切系数变化。 (6)三角形的一顶点保持不变,另外两个顶点按缩放比例缩小,然后关于直线-2x+4y+3对称。 这是一个组合变换的问题,要使得三角形的一顶点保持不变,就要将该顶点移动到原点,缩放后再平移回去,然后再关于直线对称就行了。组合变换时,先作用的变换矩阵在右端,后作用的变换矩阵在左端。 (7)四边形以原点为中心,以15°为间隔旋转。 在程序中设置一个旋转增量,每变换一次,就加上旋转增量,就可得到上图的结果。 实验数据 由于代码篇幅过长,下面是代码的主要部分。 private void initMatrix() { temp = new double[3][]; for (int i = 0; i temp.Length; i++) { temp[i] = new double[3]; } resetTemp(ref temp); temp1 = new double[3][]; for (int i = 0; i temp1.Length; i++) { temp1[i] = new double[3]; } resetTemp(ref temp1); //初始化平移矩阵 move = new double[3][]; for (int i = 0; i move.Length; i++) { move[i] = new double[3]; } for (int i = 0; i move.Length; i++) { for (int j = 0; j move[i].Length; j++) { if (i == j) {

文档评论(0)

docindpp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档