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

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

ID:48614619

大小:458.96 KB

页数:21页

时间:2020-01-29

计算机图形学实验1报告.doc_第1页
计算机图形学实验1报告.doc_第2页
计算机图形学实验1报告.doc_第3页
计算机图形学实验1报告.doc_第4页
计算机图形学实验1报告.doc_第5页
资源描述:

《计算机图形学实验1报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、设计和实现一个图形函数库一、实验要求设计和实现一个图形函数库,具有绘制直线段、任意圆弧、椭圆弧、多边形区域的阴影填充和颜色填充等功能。(仅调用画点函数)WindowsAPI:setpixel(hdc,x,y,color)二、实验平台编程环境:VisualStudio2008编程语言:C#操作系统:Windows7三、实验目的在理解画直线段,圆弧,椭圆,多边形的画法,以及阴影填充和颜色填充算法的基础上,编程实现出一个简单的画图工具,加深对个算法的理解。四、算法基本原理1、画直线段(1)算法思想本程序采用Bresenham直线算法,基本思想为:(以斜率在0~1之间的直线段为例)这种情况下,

2、选择X方向为计长方向,即增量dx=1。如图3.2所示,设Pi(xi,yi)是已选定的离直线最近的像素,现在要决定Pi+1是T还是S。显然,若d<0.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;(2)算法流程(3)实现效果2、画圆弧(1)算法思想本程序采用Bresenham圆弧算法,基本思想为:与Bresenham直线生成算法一样,其基本方法是从一个起点出发,利用判别式选择下一个显示点。判别式的值

3、通过简单计算获得,其符号用作判断。此算法在每一步都选择一个离开理想圆周最近的点Pi(xi,yi),使其误差项

4、D(Pi)

5、=

6、xi2+yi2-R2

7、在每一步都是极小值。设Pi-1(xi-1,yi-1)已被选定为最靠近圆弧的点,下一步x=xi-1+1时,要决定T还是S更接近理想的圆弧,令D(S)=(xi-1+1)2+(yi-1)2-R2D(T)=(xi-1+1)2+(yi-1-1)2-R2显然,

8、D(S)

9、>=

10、D(T)

11、时,应该取T点;反之则取S点(2)算法流程(3)实现效果3、画椭圆弧(1)算法思想椭圆生成算法与圆形生成算法类似,都是先生成八分之一圆弧,然后根据对称原则生成图形,所不

12、同的是椭圆有长轴和短轴之分,故需要提前求出45°方向椭圆焦点的坐标。然后再根据公式进行画点。(2)程序流程(3)实现效果4、画多边形(1)算法思想多边形画法是基于直线画法实现的,第一次点击确定第一个点,第二次点击画出第一条直线,之后每次点击都已上一次点击为起点这次点击为终点画线,直到结束。(2)程序流程(3)实现效果5、颜色填充(1)算法思想本程序可以由用户选择填充颜色,可对闭合图形内部进行填充,采用漫水法,进行递归画点。漫水法基本原理:Procedureflood-fill-4(x,y,old-color,new-color:integer)beginifgetpixel(frame

13、buffer,x,y)=old-colorthenbeginsetpixel(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);endend(2)实现效果6、阴影填充(1)算法思想本程序使用的填充线的斜率为-1,在任意闭合图形内点击,程序先填充点击点左下部分,后填充

14、点击点右上部分。(2)实现效果五、实验总结通过本次实验,我对基本图形的画法有了一定的了解,将课上的算法真正实践出来。并对算法进行了一定的修改和补充。在实验的同时,熟悉了C#的编程思想,通过上网查资料和与同学讨论,使我的编程水平有了一定的提高。六、源程序清单usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;

15、namespace简单画图板{publicpartialclassForm1:Form{privateBitmapbitmap;privatePenpen=newPen(Color.Black);privateintchoice=0;privateSolidBrushsBrush;privateintx1,y1,x2,y2;privateintcount=0;publicForm1(){InitializeComponent();}privat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。