计算机图形学___多边形裁剪与填充_课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程名称计算机图形学
课题名称多边形裁剪与填充
专业计算机科学与技术
班级
学号
姓名
指导教师刘长松曹燚
年月日
湖南工程学院
课程设计任务书
课程名称计算机图形学课题多边形裁剪与填充
专业班级
学生姓名
学号
指导老师刘长松曹燚
审批
任务书下达日期年月日
任务完成日期年月日
一、设计内容与设计要求
1.设计内容:
交互式地实现多边形的裁剪和填充。。
2.设计要求:
1)窗口功能设计。
2)实现鼠标画多边形与数据存储功能。
3)实现鼠标剪裁窗口选择功能。
4)实现多边形裁剪和填充功能。
3.算法提示:
多边形裁剪算法分析:
基本思想是一次用窗口的一条边裁剪多边形,窗口的一条边以及延长线构成裁剪线,该线把平面分成两个部分:可见一侧,不可见一侧。用一条裁剪边对多边形进行裁剪,得到一个顶点序列,作为下一条裁剪边处理过程的输入点。
对于每一条裁剪边,只是判断点在窗口的哪一测以及求线段与裁剪边的交点算法应随之改变。
多边形填充算法分析:
确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin 和ymax),从y=ymin 到 y=ymax, 每次用一条扫描进行填充。对一条扫描线填充的过程可分为四个步骤: a.求交b.排序c.交点配对d.区间填色。
二、进度安排
第 3 周星期一8:00——12:00
星期二8:00——12:00
星期三8:00——12:00
星期四8:00——12:00
星期五8:00——12:00
第 4 周星期一8:00——12:00
附:
课程设计报告装订顺序:封面、任务书、目录、正文、附件(A4大小的图纸及程序清单)、评分。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
一、题目内容说明:
1、交互式地实现多边形的裁剪和填充。
2、功能要求:
1)窗口功能设计。
2)实现鼠标画多边形与数据存储功能。
4)实现鼠标剪裁窗口选择功能。
5)实现多边形裁剪和填充功能。
二、总体设计:
本程序使用MFC实现多边形的裁剪和填充绘图程序。
多边形裁剪算法分析:
基本思想是一次用窗口的一条边裁剪多边形,窗口的一条边以及延长线构成裁剪线,改线把平面分成两个部分:可见一侧,不可见一侧。用一条裁剪边多多边形进行裁剪,得
到一个顶点序列,作为吓一条裁剪边处理过程的输入点。
对于每一条裁剪边,只是判断点在窗口的哪一测以及求线段与裁剪边的交点算法应随之改变。
仅用一条裁剪边时,逐次多边形裁剪框图:
在CGraphics类的CutRectangular(CRect)函数中实现对多边形的裁剪
多边形填充算法分析:
确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin和ymax),
从y=ymin 到 y=ymax, 每次用一条扫描进行填充。对一条扫描线填充的过程可分为四个步骤: a.求交b.排序c.交点配对d.区间填色。在CGraphics类中的FillPlogon函数中实现多边形的填充算法。
三、模块设计:
各个程序函数的功能,参数,变量的说明:
MFC应用程序框架中类的详细解析:
1.MainFrm:创建窗口及窗口里的菜单、工具栏、状态栏等实现交互的按钮。
1)函数int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){}创建菜单、工具栏、状栏。
2)BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)设置窗口的大小和初始位置。
2.图像裁剪View:视图,负责内存数据与用户的交互,包括数据的显示、菜单的选取,
鼠标的响应。
1.void CMyView::OnLButtonDown(UINT nFlags, CPoint point){}对鼠标按下
左键的响应,如果是自定义裁剪的区域操作就捕获鼠标按下的点,画裁剪区
域,如果是自定义点坐标的操作就捕获鼠标的点画多边形。
2.void CMyView::OnMouseMove(UINT nFlags, CPoint point){}对
鼠标移动的响应。用捕获的点画出相应的矩形裁剪边框。画边框的时候,先
用白色擦出原先的矩形边框,再用虚线画出新的举行边框
3.void CMyView::OnRButtonUp(UINT nFlags, CPoint point){}对鼠标放开左
键的相应。如果是自定义点的坐标,就获取新的初始裁减矩形范围。
4.void CMyView::OnLButtonUp(UINT nFlags, CPoint point){}对鼠标放开左
键的响应
5.void CMyView::OnInitialUpdate(){}初始化裁剪区域和在窗口中画一个矩
形和一个五角星。
6.void CMyView::OnDraw(CDC* pDC){}重画窗口,用
voidCMyView::OnInitialUpdate{}来启动它,通过消息映射表处理菜单、工
具条、快捷键和其他用户消息。定义裁剪矩形区域,并赋值。当自定义多边
形坐标时,在各个点坐标处画一个小圆,以显示点的位置。画出多边形。
3.图像裁剪DOC:文档,负责内存数据与磁盘的交互。
1、void CMyDoc::OnFillployon(){}
2、void CMyDoc::OnUpdateFillployon(CCmdUI* pCmdUI){}
3、void CMyDoc::OnCutRect(){}
4、void CMyDoc::OnUpdateCutRect(CCmdUI* pCmdUI){}
4.CGraphics:实现多边形的填充和裁剪。
1、构造函数CGraphics():PointCount(10),Point(NULL){}初始化五角星的顶点
坐标。
2、析构函数~CGraphics(){}删除动态生成的Point指针。