计算机图形学实验1报告.docxVIP

  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文档。上传文档
查看更多
设计和实现一个图形函数库 一、 实验要求 设计和实现一个图形函数库,具有绘制直线段、任意圆弧、椭圆 弧、多边形区域的阴影填充和颜色填充等功能。(仅调用画点函数) Windows API: setpixel(hdc,x,y,color) 二、 实验平台 编程环境:Visual Studio 2008 编程语言:C# 操作系统:Windows 7 三、 实验目的 在理解画直线段,圆弧,椭圆,多边形的画法,以及阴影填充和 颜色填充算法的基础上,编程实现出一个简单的画图工具,加深对个 算法的理解。 四、算法基本原理 1、画直线段 (1 )算法思想 本程序采用Bresenham直线算法,基本思想为: (以斜率在0~1之间的直线段为例) 这种情况下,选择X方向为计长方向,即增量dx=1。如图3.2所 示,设Pi (xi ,yi )是已选定的离直线最近的像素,现在要决定Pi+1是T 还是S。显然,若d0.5,则S比较靠近直线,应选S;若d=0.5,则 应选 T。(m= △ y/△ x)令 e=d-0.5(初值为-0.5),即有: e 0 时,选 Pi+1 (xi+1, yi),更新 e=e+m; e =0 时,选 Pi+1 (xi + 1, yi + 1),更新 e=e+m-1; (1)算法思想 本程序采用Bresenham圆弧算法,基本思想为: 与BresenhamM线生成算法一样,其基本方法是从一个起点出发,利 用判别式选择下一个显示点。判别式的值通过简单计算获得,其符号 用作判断。 此算法在每一步都选择一个离开理想圆周最近的点 Pi (xi, yi),使 其误差项|D(Pi)|=|xi2+yi2-R2|在每一步都是极小值。 设Pi-1 (xi-1, yi-1 )已被选定为最靠近圆弧的点 ,下一步x=x i-1+1时,要决定T还是S更接近理想的圆弧,令 D(S)=(xi-1+1)2 + (yi-1)2 -R2 D(T)=(xi-1 +1)2 + (yi-1 -1)2-R2 显然,|D(S)|=|D(T)|时,应该取T点;反之则取S点 3、画椭圆弧 (1)算法思想 椭圆生成算法与圆形生成算法类似,都是先生成八分之一圆弧, 然后根据对称原则生成图形,所不同的是椭圆有长轴和短轴之分, 故 需要提前求出45方向椭圆焦点的坐标。然后再根据公式进行画点。 4、画多边形 (1)算法思想 多边形画法是基于直线画法实现的,第一次点击确定第一个点, 第二次点击画出第一条直线,之后每次点击都已上一次点击为起点这 次点击为终点画线,直到结束。 本程序可以由用户选择填充颜色,可对闭合图形内部进行填充, 采用漫水法,进行递归画点。漫水法基本原理: Procedure flood-fill-4(x,y,old-color,new-color:integer) begin if getpixel(framebuffer,x,y)=old-color then begin setpixel(framebuffer,x,y,newcolor); flood-fill-4(x,y+1,old-color,new-color); flood-fill-4(x,y-1,old-color,new-color); flood-fill-4(x-1,y,old-color,new-color); flood-fill-4(x-1,y-1,old-color,new-color); end end (1)算法思想 本程序使用的填充线的斜率为-1,在任意闭合图形内点击,程序 先填充点击点左下部分,后填充点击点右上部分 五、实验总结 通过本次实验,我对基本图形的画法有了 一定的了解, 将课上的 算法真正实践出来。并对算法进行了一定的修改和补充。 在实验的同 时,熟悉了 C#的编程思想,通过上网查资料和与同学讨论,使我的 编程水平有了 一定的提高。 六、源程序清单 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace简单画图板 ( public partial class Forml : Form ( private Bitmap bitmap; private Pen pen = new Pen(Color.Black); private int choice = 0; private SolidBrush sBrush; private int x1

文档评论(0)

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

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

1亿VIP精品文档

相关文档