- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
吉林大学
软件学院
《图形学与人机交互》
实验报告
班级:9班
学号姓名:苗新
姓名
苗新
学号实验项目
图形学算法实现与演示
实验性质
?演示性实验 □验证性实验
?操作性实验 □综合性实验
实验地点
计算机大楼#A110
机器编号
24
指导教师
郭晓新
实验时间
2018年
12月13日
一、系统实现的功能
(根据自己编写的系统都实现了哪些功能来写,写到三级菜单)
图形应用
图形绘制
绘制矩形
绘制圆形
设置颜色
区域填充
绘制多边形
设置颜色
三维变换
绘制立方体
延X 轴方向平移
延Y 轴方向平移
延Z 轴方向平移
绕X 轴旋转
绕Y 轴旋转
绕Z 轴旋转
绘制曲线
绘制Bezier 曲线
附加要求:
4.1 应用程序中除 SetPixel 绘图函数以外,不使用其他绘图函数;
4.2 同组功能(功能所处的二级菜单相同)所绘制的图形要能够同时在视图 区存在,不同组功能在调用前先清屏(清屏功能可设置成主动调用);
4.3 用于绘制图形的功能在绘制图形时应实现橡皮线功能,即可实时看到绘 制效果(针对功能 3.1、3.2、3.4、3.14,对于 3.14 是实时看到控制多边形);
二、 实现的图形学算法
(为完成系统功能,实现了哪些图形学算法,且这些算法是如何实现的,如算法的实现函数是什么(函数名,参数,返回值,函数功能等)以及采用了哪些数据结构(数组,链表等))
绘制矩形
采用了Bresenham 划线算法:
//绘制直线
void DDALine(CDC* pDC,int x1,int y1,int x2,int y2)
//绘制矩形
void DrawRectangle(CDC *pDC, CPoint p1, CPoint p2)
绘制圆形
中点画圆算法
Void PrintCircle(CDC *pDC,int x0, int y0, int r) //绘制圆形
多边形填充
多边形的扫描填充算法
void GetET(); //制作 ET 边表
void Polygonfill(CDC *pDC, CArrayCPoint,CPoint* points, COLORREF color)//多边形填充数据结构有:链表,数组
立方体旋转
立方体的旋转平移公式、透视投影算法
立方体每个面的填充实现方法是:将面按照面的中点与投影点的距离进行从大到小排序,然后根据排序所得的面进行涂色覆盖,涂色采用的是多边形的扫描转化算法
void CubeFaceFill(CDC *pDC,CArrayCPoint,CPoint* points,COLORREF color)//链表,数组
绘制Bezier曲线
Bizier 曲线几何作图法
Point decas(Point P[], int n, double t); 计算 Bezier 曲线在参数为 t 时的坐标值
void bezier_to_points(Point P[], int n, Point pts[], int npoints);计算离散点序列
void DrawCurver(CDC* pDC, Point P[], int n, Point pts[], int npoints); 绘制
三、采用的交互方式
(系统采用了哪些交互方式来完成人机交互的图形绘制,这些交互方式应用到了哪些系统消息,)
1.绘制矩形:
鼠标交互,鼠标左键按下开始绘制,鼠标左键抬起结束绘制,绘制完成
2.绘制圆形
鼠标交互,鼠标左键按下开始绘制,鼠标左键抬起结束绘制,绘制完成
3.多边形填充
鼠标交互,鼠标点击绘制直线(多边形的边),左键双击结束绘制,并进行填充。
4.立方体的变换
点击选择变换方式,按方向-键和-键进行变换
5.绘制Bezier 曲线
视图区用鼠标左键单击的方式顺序输入控制点,控制点数量为 4 时绘制以鼠标输入的点为控制点的 3 次Bezier 曲线
四、实验结果
(每组功能可以贴一张运行结果截图,不要过多贴图)
绘制图形
区域填充
3、三维变化
绘制Bezier曲线
五、遇到的问题及解决办法
(在系统实现过程中遇到了什么样的问题,及采用了何种解决办法)
多边形扫描填充算法
解决方法:查询资料和与同学讨论
立方体面的填充
解决方法:以面的中心和投影点的距离大小排序,填充面。
文档评论(0)