1、1 图形学课程设计图形学课程设计 -多边形剪裁和填充图形软件设计 2 一、一、题目内容说明:题目内容说明: 1 1、交互式地实现、交互式地实现多边形多边形的的裁剪裁剪和填充和填充。 2 2、功能功能要求:要求: 1) 窗口功能设计。 2)实现鼠标画多边形与数据存储功能。 4)实现鼠标剪裁窗口选择功能。 5) 实现多边形裁剪和填充功能。 二、总体设计:二、总体设计: 本程序使用 MFC 实现多边形的裁剪和填充绘图程序。 多边形裁剪算法分析:多边形裁剪算法分析: 基本思想是一次用窗口的一条边裁剪多边形, 窗口的一条边以及延长线构成裁 剪线,改线把平面分成两个部分:可见一侧,不可见一侧。用一条裁剪边
2、多多边形 进行裁剪,得到一个顶点序列,作为吓一条裁剪边处理过程的输入点。 对于每一条裁剪边, 只是判断点在窗口的哪一测以及求线段与裁剪边的交点算 法应随之改变。 仅用一条裁剪边时,逐次多边形裁剪框图: 在 CGraphics 类的 CutRectangular(CRect)函数中实现对多边形的裁剪 多边形填充算法多边形填充算法分析:分析: 3 确定多边形所占有的最大扫描线数, 得到多边形顶点的最小和最大 y 值 (ymin 和 ymax) , 从 y=ymin 到 y=ymax, 每次用一条扫描进行填充。 对一条扫描线填充的 过程可分为四个步骤: a.求交 b.排序 c.交点配对 d.区间填色
3、。在 CGraphics 类中 的 FillPlogon 函数中实现多边形的填充算法。 三、模块设计:三、模块设计: 各个程序函数的功能,参数,变量的说明: MFC 应用程序框架中类的详细解析: 1 1MainFrm:创建窗口及窗口里的菜单、工具栏、状态栏等实现交互的按钮。 1)函数 int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)创 建菜单、工具栏、状栏。 2)BOOL CMainFrame:PreCreateWindow(CREATESTRUCT在指定设备中画多边形。 4、 bool FillPloyon(CDC*);填充多边形。
4、 5、 bool InterCross(CPoint,CPoint,CPoint,CPoint,CPoint 判 断两条线段是否相交。 6、 bool CutRect(CRect);对多边形进行裁剪。 7、 bool IsInSquareRgn(CRect,CPoint,int);对多边形裁剪时, 判断 线段断点是否在可视一侧。 8、 bool SortArray(int*,int);冒泡排序。 四、详细设计:四、详细设计: 1、创建窗口、菜单、工具栏、状栏的函数。、创建窗口、菜单、工具栏、状栏的函数。 int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CFrameWnd:OnCreate(lpCreateStruct) = -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS