图形学课程设计论文.doc_第1页
图形学课程设计论文.doc_第2页
图形学课程设计论文.doc_第3页
图形学课程设计论文.doc_第4页
图形学课程设计论文.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学武汉理工大学 课程论文课程论文 课课 程程 名名 称称 计算机图形学基础计算机图形学基础 开开 课课 学学 院院 计算机科学与技术学院计算机科学与技术学院 指导老师姓名指导老师姓名 学学 生生 姓姓 名名 学学 生生 学学 号号 学生专业班级学生专业班级 2010 2011 学年 第 2 学期 计算机图形学 1 目录目录 计算机图形学基础 课设论文 2 1 课设要 求 2 2 程序的操作及功能说 明 2 3 各模块的介 绍 2 3 1 坐标建立 2 3 1 1 建立坐标的基本思 想 2 3 1 2 建立坐标的算 法 2 3 2 直线的绘 制 3 3 2 1 DDA 算法的实 现 3 3 2 2 中点 Bresenham 算法的实 现 3 3 2 3 改进 Bresenham 算法画 线 6 3 2 4 绘制图形的对话 框 8 3 2 5 绘制直线的截 图 9 3 3 圆的绘 制 计算机图形学 2 10 3 3 1 八分法画圆算法的实 现 10 3 3 2 Bresenham 算法画 圆 10 3 3 3 绘制图形的对话 框 11 3 3 4 绘制圆的截 图 12 3 4 Bresenham 算法画椭 圆 12 3 4 1Bresenham 椭圆算法的实 现 13 3 4 2 绘制图形的对话 框 14 3 4 3 绘制椭圆的截 图 14 3 5 二维图形的变 换 14 3 5 1 平移变 换 15 3 5 2 比例变 换 16 3 5 3 对称变 换 17 3 6清 屏 20 3 7关于作 者 20 4 个人小 计算机图形学 3 结 21 4 1设计中遇到的问题及解决方 法 2 1 4 2还有一些问题没有解 决 21 计算机图形学基础 课程论 文 22 计算机图形学基础计算机图形学基础 课设论文课设论文 1 1 课设要求 课设要求 1 给出系统框架 2 调用画点的函数 分别用DDA 中点Bresenham算法和改进Bresenham算法绘 制直线和中点算法绘制直线 用不同的算法绘制圆和椭圆 并各自比较算法精 度与效率的差别 3 实现二维图形的变换 包括平移 放缩 旋转 错切以及复合变换 4 运用所学的多边形扫描算法实现多边形的扫描转换 5 运用所学的区域填充算法实现区域填充 6 运用所学算法实现线段裁剪以及多边形裁剪 多边形裁剪为可选 7 自己实现其它附加以及需要完善的功能模块 2 2 程序的操作及功能说明 程序的操作及功能说明 1 绘制直线 分别用 DDA 算法 中点 Bresenham 算法 改进 Bresenham 算法画 直线 2 绘制圆和椭圆 绘制圆 中点法画圆和 Bresenham 法画圆 Bresenham 法 画椭圆 3 图形的变换 平移变换 比例变换 对称变换 关于 y 轴对称 关于 x 轴对 计算机图形学 4 称 关于直线 y x 对称 关于直线 y x 对称 4 清屏 5 关于作者 3 3 各模块的介绍各模块的介绍 3 13 1 坐标建立坐标建立 1 1 建立坐标的基本思想 建立坐标的基本思想 在 MFC 中 系统默认是以左上角作为坐标的原点 并以向右和向下为 X 轴 Y 轴的正方向 而在进行图形绘制的过程中 需要以工作区的中心为原点 并 以向右和向上为 X 轴和 Y 轴的正方向 因而 需要运用 MFC 中的映射模式来改 变程序的坐标 其中映射模式中的 MM LOENGLISH 恰好符合所需要的要求 应而 使用该模式来建立坐标 2 2 建立坐标的算法 建立坐标的算法 CClientDC dc this CRect rc GetClientRect dc DPtoLP dc MoveTo 0 rc bottom 2 dc LineTo rc right rc bottom 2 dc MoveTo rc right 2 0 dc LineTo rc right 2 rc bottom dc SetMapMode MM LOENGLISH dc SetViewportOrg rc right 2 rc bottom 2 dc SetViewportExt rc right rc bottom dc SetWindowOrg 0 0 3 23 2 直线的绘制直线的绘制 直线的绘制算法有很多 下面就目前常用的 DDA 算法 中点 Bresenham 算法 改进 Bresenham 算法进行研究 3 2 1DDA3 2 1DDA 算法的实现算法的实现 1 1 DDADDA算法的算法的基本思想 基本思想 已知过端点P0 x0 y0 P1 x1 y1 的直线段L y kx b 直线斜率为 k y1 y0 x1 x0 Xi 1 Xi X Yi 1 Yi Y 其中 1 max X Y max X Y X k 1 k 1时 Xi 1 Xi 或 1 k Yi 1 Yi 或 1 计算机图形学 5 2 DDA 算法的实现算法的实现 DDA 算法画线 int dx dy epsl k i float x y xIncre yIncre dx x1 x0 dy y1 y0 x float x0 y float y0 if abs dx abs dy epsl abs dx else epsl abs dy xIncre float dx float epsl yIncre float dy float epsl for i 0 i epsl i dc SetPixel int x 0 5 int y 0 5 color x x xIncre y y yIncre 3 2 23 2 2 中点中点 BresenhamBresenham 算法的实现算法的实现 1 1 中点中点BresenhamBresenham算法算法基本原理 基本原理 每次在最大位移方向上走一步 而另一个方向是走还是不走取决于误差项 的判别 若位移较小的方向上的下一个点距离 1更近 则这个方向上向前走一 步 否则 这个方向上不向前前进 此外 在运用Bresenham算法时还应当注意 当所画直线垂直于X轴时的情况 2 2 中点 中点 BresenhamBresenham 算法的实现算法的实现 中点 Bresenham 算法画线 int a b delta1 delta2 d x y 传入端点坐标 x 值相等 if x0 x1 if y0 y1 for int i y0 i y1 i dc SetPixel x0 i color else for int i y1 i y0 i dc SetPixel x0 i color return 斜率判断 斜率绝对值大于 1 则 m 为 false 否则为 true BOOL m fabs y1 y0 x1 d x0 x0 x1 x1 d d y0 y0 y1 y1 d a y0 y1 b x1 x0 x x0 y y0 dc SetPixel x y color 斜率绝对值小于等于 1 if m 第一种情况 y 值递增 if y0 y1 d 2 a b delta1 2 a delta2 2 a b while x x1 if d 0 x y d delta2 else x d delta1 dc SetPixel x y color 第三种情况 y 值递减 else d 2 a b delta1 2 a delta2 2 a b while x x1 if d 0 x d delta1 else x y d delta2 dc SetPixel x y color 计算机图形学 7 斜率绝对值大于 1 else 第二种情况 y 值递增 if y0 y1 d a 2 b delta1 2 b delta2 2 a b while y y1 if d y1 if d 0 y x d delta2 else y d delta1 dc SetPixel x y color 3 2 33 2 3 改进改进 BresenhamBresenham 算法画线算法画线 1 1 改进改进 BresenhamBresenham 算法的基本原理算法的基本原理 改进 Bresenham 算法的原理与 Bresenham 算法相似 都是每次在最大位移 方向上走一步 而另一个方向是走还是不走取决于误差项的判别 只是前者在 误差计算上进行了相关的改进 使其可以画出更加精确的直线 此外 在运用 改进 Bresenham 算法时还应当注意当所画直线垂直于 X 轴时的情况 2 2 改进 改进 BresenhamBresenham 算法的实现算法的实现 改进 Bresenham 算法画线 int x y dx dy p 计算机图形学 8 传入端点坐标 x 值相等 if x0 x1 if y0 y1 for int i y0 i y1 i dc SetPixel x0 i color else for int i y1 i y0 i dc SetPixel x0 i color return 斜率判断 斜率绝对值大于 1 则 m 为 false 否则为 true BOOL m fabs y1 y0 x1 p x0 x0 x1 x1 p p y0 y0 y1 y1 p x x0 y y0 dx x1 x0 dy y1 y0 斜率绝对值小于等于 1 if m 第一种情况 y 递增 if y0 y1 p dy 1 dx while x x1 dc SetPixel x y color if p 0 x p p dy 1 else x y p p dy dx 1 第三种情况 y 递减 计算机图形学 9 else p dx dy 1 while x x1 dc SetPixel x y color if p 0 x p p dy 1 else x y p p dy dx 1 斜率绝对值大于 1 else 第二种情况 y 递增 if y0 y1 p dx 1 dy while y y1 dc SetPixel x y color if p 0 y p p dx 1 else x y p p dx dy 1 第四种情况 y 递减 else p dx y0 dc SetPixel x y color if p 0 y p p dx 1 else x y p p dx dy 1 计算机图形学 10 3 2 43 2 4 绘制图形的对话框绘制图形的对话框 1 1 对话框的介绍 对话框的介绍 在绘制直线时 使用对话框的方式来获取直线的起点坐标和终点坐标 并 且在对话框中选择所要使用的直线生成算法 此外 在对话框中 还添加了选 择颜色的选项 让用户可以自己来选择颜色来进行绘图 绘制直线时 默认的 颜色是红色 此外 绘制直线的默认算法是 DDA 算法 2 对话框的截图 对话框的截图 3 2 53 2 5 绘制直线的截图绘制直线的截图 计算机图形学 11 其中红色线为 DDA 算法所绘制的 蓝色线为 Bresenham 算法所绘制的 黄 色线为改进的 Bresenham 算法所绘制的 3 33 3 圆的绘制圆的绘制 常用的圆的扫描转换算法有八分法画圆和 Bresenham 画圆算法 其中 八 分法画圆是圆的扫描变换中的基础算法 3 3 13 3 1 八分法画圆算法八分法画圆算法 1 1 八分法画圆的基本思想 八分法画圆的基本思想 八分法画圆的基本思想是在圆上任取一个点 由于圆是一个关于轴对称 的图形 因而可以根据这个点来得出圆上的另外七个点 以此通过这八个点来 画圆弧 以得到一个完整的圆 2 2 八分法画圆算法的实现 八分法画圆算法的实现 八分法画圆 int x y dx dy d x 0 y r d 1 r dx 3 dy 5 r 1 while x y 绘制圆弧上对称的八个像素点 dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color 计算机图形学 12 dc SetPixel x x0 y y0 color dc SetPixel y x0 x y0 color dc SetPixel y x0 x y0 color dc SetPixel y x0 x y0 color dc SetPixel y x0 x y0 color if d 0 d dx dx 2 x else d dx dy dx 2 dy 2 x y 3 3 23 3 2 BresenhamBresenham 算法画圆算法画圆 1 Bresenham 1 Bresenham 算法画圆的基本思想算法画圆的基本思想 Bresenham 算法画圆实际上是对八分法画圆中的误差项判断进行了一点相 应的改进 在 Bresenham 算法画圆算法中 误差项的判断和直线的 Bresenham 算法是一样的 2 2 BresenhamBresenham 法画圆算法的实现法画圆算法的实现 Bresenham 法画圆 int x y p x 0 y r p 3 r 1 for x y x 绘制圆弧上对称的八个像素点 dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color dc SetPixel y x0 x y0 color dc SetPixel y x0 x y0 color dc SetPixel y x0 x y0 color dc SetPixel y x0 x y0 color if p 0 p x 2 6 else 计算机图形学 13 p x y 2 10 y 3 3 33 3 3 绘制图形的对话框绘制图形的对话框 1 1 对话框的介绍 对话框的介绍 在绘制圆时 使用对话框的方式来获取圆的圆心坐标和半径 并且在对话 框中选择所要使用的圆生成算法 此外 在对话框中 还添加了选择颜色的选 项 让用户可以自己来选择颜色来进行绘图 绘制圆时 默认的颜色是蓝色 此外 绘制圆的默认算法是八分法画圆算法 2 对话框的截图 对话框的截图 计算机图形学 14 3 3 43 3 4 绘制圆的截图绘制圆的截图 图中蓝色的为八分法画圆算法生成的圆 红色为 Bresenham 算法画圆 3 43 4 BresenhamBresenham 算法画椭圆算法画椭圆 由于可以将椭圆看成是拉长了的圆 因而生成椭圆的中点 Bresenham 算法 和生成圆的中点 Bresenham 算法有类似之处 计算机图形学 15 3 4 13 4 1 BresenhamBresenham 画椭圆算法的实现画椭圆算法的实现 Bresenham 画椭圆 int x y p int aa a a bb b b 下面绘制第 1 部分 x 0 y b p 2 bb aa 1 2 b while bb x 0 p 4 aa 1 y bb 4 x 6 y else p bb 4 x 6 x 下面绘制第 2 部分 x a y 0 p 2 aa bb 1 2 a while bb x aa y 绘制对称的四个点 dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color dc SetPixel x x0 y y0 color if p 0 p 4 bb 1 x aa 4 y 6 x else p aa 4 y 6 计算机图形学 16 y 3 4 23 4 2 绘制图形的对话框绘制图形的对话框 1 1 对话框的介绍 对话框的介绍 在绘制椭圆时 使用对话框的方式来获取椭圆的中心坐标 长轴和短轴 此外 在对话框中 还添加了选择颜色的选项 让用户可以自己来选择颜色来 进行绘图 绘制圆时 默认的颜色是红色 2 对话框的截图 对话框的截图 3 4 33 4 3 绘制椭圆的截图绘制椭圆的截图 3 53 5 二维图形的变换二维图形的变换 图形的二维变换是计算机图形学领域内较为基础的内容之一 通过图形变 换 可有简单图形得到复杂图像 方便用户对图形进行观察 一般来说 图形 的几何变换是指对图形的几何信息经过平移 比例 旋转 对称 错切等变换 计算机图形学 17 后产生新的图形 下面就二维图形的简单图形变换进行介绍 3 5 13 5 1 平移变换平移变换 平移变换只改变图形的位置 不改变图形的大小和形状 通过图形的平移 变换 可以让用户感受到图形的移动 1 1 平移变换的算法实现 平移变换的算法实现 CPen pen0 PS SOLID 1 color CPen pOldPen dc SelectObject dc Rectangle x0 y0 x1 y1 CPen pen1 PS SOLID 1 color1 pOldPen dc SelectObject x0 x0 a y0 y0 b x1 x1 a y1 y1 b dc Rectangle x0 y0 x1 y1 dc SelectObject pOldPen 2 2 绘制图形的对话框绘制图形的对话框 1 1 对话框的介绍对话框的介绍 在进行平移变换时 使用矩形框来验证平移 用对话框的方式来获取矩形 的上的两个对角 此外 在对话框中 还添加了选择颜色的选项 让用户可以 自己来选择颜色来进行选择平移前后的颜色 绘制圆时 默认的颜色是平移前 是红色 平移后是蓝色 2 对话框的截图对话框的截图 3 3 平移截图平移截图 计算机图形学 18 其中红色的是平移前的 蓝色的是平移后的 3 3 23 3 2 比例变换比例变换 图形的比例变换就是对图形的放缩 使得图形可以放大和缩小 从而便于 使用 比例变换对话框的截图 比例变换的截图 计算机图形学 19 此图为缩小变换 红色为原图 蓝色为缩小后的图 此图为放大变换 红色为原图 蓝色为缩小后的图 3 3 33 3 3 对称变换对称变换 对称变换其实就是根据一条对称轴 然后计算对称后的点的坐标 进而确 定图形在对称后的形状和位置 从而让用户可以体验到图形的变换 对称变换对话

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论