- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机辅助几何设计之教学演示系统
中国科学技术大学数学系
科学计算与计算机图形学实验室
摘要
计算机辅助几何设计教学演示系统(CAGD教学系统)是一个教学软件. 它可以用来交互地演示CAGD课程内的基本曲线与曲面的几何形状与几何性质. 其界面是用MFC类库构成, 几何绘图所用语言为OpenGL函数. 程序设计采用了面向对象的方法, 各类曲线曲面的绘制用的是最常用的算法.
关键词
计算机辅助几何设计, 计算机辅助教学, OpenGL
1 背景
计算机辅助几何设计(Computer Aided Geometry Design)这门课主要研究各类几何曲线, 曲面的性质和应用[1]. 开发CAGD教学系统的目的, 是为了辅助 CAGD 这门课的课堂教学. 现在教师在讲授此课中遇到的一个问题普遍是, 当讲述某类曲线、曲面的几何特性时, 无法直观地把它们展示给学生. 在黑板上手工画出图形难度很大, 且无法交互地展示对曲线、曲面的各种操作. 现在的市场上有不少几何造型的系统(如 3D Studio), 但它们并不适于教学使用, 不能按教学上的要求, 对特定曲线、曲面演示其几何特性.
在教学软件类中, 还没有CAGD 这方面的真正软件. 因此我们在利用中国科技大学数学系CAGD小组多年来的科研成果,开发出自己的CAGD教学软件.
2 系统综述
我们所开发的教学系统, 采用面向对象的设计技术. 其界面, 利用 VC++ 的 MFC 类库;作图显示, 借助 OpenGL 的 API函数. 由 MFC 产生界面比较方便, 因为它具有相当好的消息处理机制, 可以节省很多时间;而 OpenGL 的绘图功能, 用于三维作图近乎完美.
软件分成以下三大模块:
系统框架模块. 主要实现文件存取、数据输入、绘图环境设置、对图形的操作消息输入等功能.
通用图形模块. 主要实现对几何物体属性的包装.
几何对象模块. 包括八个子模块: Bézier 曲线、曲面模块, B-Spline 曲线、曲面模块, Coons 曲面模块, 隐式曲面模块. 实现对这些几何对象的各种几何变换、添加顶点、删除顶点、升阶、降阶、拼接、分离提取、求值等操作. 另外添加一些常用的图元如环、球、四面体等, 这些几何体采用OpenGL的命令直接绘制.
3 几何数据结构模型
本软件使用的数据结构中, 所包含的几何信息有:曲面Surface、曲线Curve、离散点Point. 所包含的拓扑信息有:物体MyObject、图元Unit、控制顶点Vertex. 具体含义说明如下:
离散点Point:三维空间中的一个位置;
曲线Curve:曲线看作把一些离散点列用线段连接而成;
曲面Surface:曲面看作把离散点网格用线段连接(或并填充)而成;
控制顶点Vertex:用来控制 NURBS 曲线曲面的生成的那些离散点(不一定在曲线曲面上);
图元Unit:可作图的单元, 标记曲线曲面的特性, 用以标记一个可作图几何对象;
物体MyObject:由图元组成的可操作几何对象.
4 模块结构
系统框架模块
在这个模块里, 实现各个系统元素的协调. 它的结构如图1所示:
图1 系统框架模块
具体实现时, 我们设计了几个主要类, 它们之间的关系如图2所示:
图2 类之间的关系
以上几个类构成了系统框架模块.
2)通用绘图模块由下面几个类构成:点(CPoint3D)、线(CCurve)、面(CSuface)、图元(CUnit)、物体(CMyObject). 这几个类描述了简单的几何数据结构.
3)几何对象模块由这些类描述:Bezier曲线类(CBezierCurveBezier曲面类(CBezierSurface)、B样条曲线(CBSplineCurve)、B样条曲面(CBSplineSurface)、Coons曲面(CCoonsSurface)、隐式曲线(CImplicitCurve)、隐式曲面(CImplicitSurface). 它们都称为几何图元类, 都由CUnit类继承而来. 在使用时, 这些类的对象作为CMyObject类的成员变量来调用绘制的.
5系统状态
为了协调对各处几何对象的操作, 我们设置了一些状态. 把整个系统分为三个状态:缺省的不做任何操作的状态、创建几何对象状态、修改几何对象状态. 创建状态下, 又细分为用鼠标点击创建和用键盘输入创建两个子状态. 在修改状态下, 再由两个变量来组合确定最终状态的修改状态. 一个变量是选择层次, 一个是操作. 在CCAGDDoc中定义了一个结构tagStatus, 这个结构内的变量和取值如图3和图4所示:
NONE_STATUS
文档评论(0)