没有合适的资源?快使用搜索试试~ 我知道了~
绘制金刚石图案pdf (2).docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2022-11-25
22:02:32
上传
评论
收藏 2.98MB DOCX 举报
温馨提示
试读
23页
。。。
资源推荐
资源详情
资源评论
自定义二维坐标系。
二维点类的定义方法。
对话框的创建及调用方法。
金刚石图案算法。
1.案例描述
将半径为 r 的圆周 n 等份,然后用直线段将每一个等分点和其他所有等分点连接,形
成的图案称为金刚石图案。使用对话框读入等分点个数与圆的半径,以屏幕客户区中心为
圆心,请使用 MFC 的基本绘图函数绘制蓝色直线段构成的金刚石图案。
2.功能说明
(1)程序运行界面提供“文件”、“图形”和“帮助”3 个弹出菜单项。“文件”菜单
项提供“退出”子菜单,用于退出工程;“图形”菜单项提供“绘图”子菜单,用于绘制金
刚石图案;“帮助”菜单项提供“关于”子菜单,用于显示开发信息。
(2)工具栏提供与子菜单项“退出”、“绘图”、“关于”相对应的图标按钮。
(3)单击 “绘图”子菜单或“绘图”图标按钮,弹出图1-1(a)所示的输入对话框,
读入圆的等分点个数和圆的半径,单击输入对话框的 OK 按钮绘制金刚石图案。
(4)自定义屏幕二维坐标系,原点位于客户区中心,x 轴水平向右为正,y 轴垂直向上为
正。以二维坐标系原点为圆心绘制半径为 r 的圆,将圆的 n 等分点使用直线段彼此连接形
成金刚石图案,如图 1-1(b)所示。
图 1-1 输入对话框及效果图
二、案例分析
本案例设计的目的是使用 Visual C++的 MFC 开发平台来建立一个 Test 工程,为后续
的案例设计提供一个通用的工程模板。Test 工程包含了菜单设计、工具栏图标按钮设计、
输入对话框设计和关于对话框设计等任务。在建立 Test 工程模板的基础上,本案例以绘制
金刚石图案为例,讲解二维点类 CP2 的设计方法和 CTestView 类的修改方法。
1. 菜单和工具栏按钮
根据案例的功能要求,需要在 MFC 环境中建立一个由“文件”、“图形”和“帮助”3
个菜单项组成的弹出菜单,其中“文件”菜单项的子菜单为“退出”,用于退出 Test 工程,
如图 1-2 所示;“图形”菜单项的子菜单为“绘图”,用于调用输入对话框绘制金刚石图案,
如图 1-3 所示;“帮助”菜单项的子菜单为“关于”,用于显示开发人员信息,如图 1-4 所
示。
工具栏上的图标按钮
代表“退出”子菜单、图标按钮
代表“绘图”子菜单,
图标按钮
ID 号。
代表“关于”子菜单。关联图标按钮与菜单项的方法是让二者具有相同的
由于标题栏图标的大小为 16×16,Debug 文件夹内的图标的大小为 32×32,本案例将
系统标题栏默认图标 修改为 ,将 Debug 文件夹内的默认图标 修改为
。
图 1-2 “退出”子菜单
图 1-3 “绘图”子菜单
图 1-4 “关于”子菜单
2. 对话框
(1)定义输入对话框类 CInputDlg,输入 “等分点个数”和“圆的半径”两个参数,
如图 1-1(a)所示。
(2)新关于对话框是在 Test 工程提供的原关于对话框的基础上修改而成,如图 1-5
所示。
(a)原“关于”对话框
(b)新“关于”对话框
图 1-5 “关于”对话框
3. 二维点类
图形是由像素点组成的,像素点的绘制使用的是整数坐标。在图形的设计过程中,为
了保证计算精度,使用了双精度数,将计算结果输出到屏幕时,需要将双精度数值转换为
整数值。
本案例定义了二维坐标点类 CP2(在 Visual C++中,常用大写字母 C 开始的标识符作
为类名),用于对各个点的 double 型坐标(x,y)进行整体处理,如图 1-6 所示。
P
CP2
1
P
+x:double
0
+y:double
P
4
P
3
图 1-6 二维点类类图
图 1-7 n=5 时的线段连接
类图 1-6 中,“+”代表公有成员(“-”代表私有成员,“#”代表保护成员)。虽然一
般在类的设计中常将成员变量设置为私有成员,但二维点类中的(x,y)主要用于类外赋
值,因此 CP2 类使用了公有数据成员。
4. 金刚石图案
金刚石图案是每一个顶点都与其它顶点相连的正 n 边形。金刚石图案有时被用做计算
机图形设备的测试图案,其有序的形状可以揭示任何扭曲。通过观察交汇于每个顶点的直
线所呈现出来的拥挤和模糊程度,可以确定设备的分辨率。
本案例设计的技巧是使用线段连接每个顶点时不进行重复连接。例如当圆的等分点个
数 n=5 时,只连接 5 段直线。线段的连接情况如图 1-7 所示,线段端点见表 1-1。
表 1-1 线段连接方式
起点
终点
1
2
4
P
P,P,P
1
4
3
P
3
P
4
5. 一维堆内存
圆的等分点个数是输入值,需要定义动态对象数组保存等分点坐标,以实现绘制任意
等分点个数的金刚石图案。本案例定义了 CP2 类的一维对象数组指针 P。使用动态对象数
组,可以避免静态数组的“大开小用”的弊端。动态数组在堆区中分配,动态数组的大小
只有在程序运行时才能确定,这样编译器在编译时就无法为它们预留内存空间,在程序运
行时才根据输入值进行内存分配,这种方法称为动态内存分配。
Visual C++中一维动态数组分配的格式为
指针变量名=new 类型名[下标表达式];
new 运算符返回的是一个指向所分配类型数组的指针,动态创建的数组本身没有名字。
使用 new 运算符创建数组时只能调用类的默认构造函数。如果类内定义了一个带参构造函
数,Visual C++将不再提供默认构造函数,这时需要显式定义默认构造函数。
使用 new 运算符的最大问题是容易造成内存泄漏。为了避免内存泄漏,需要使用 delete
运算符来释放由 new 运算符所分配的堆空间。
Visual C++中动态数组释放的格式为
delete []指向该数组的指针变量名;
数组分配格式和数组释放格式中的方括号是非常重要的,两者必须配对使用,如果
delete 语句中少了方括号,编译器认为该指针是指向数组第一个元素的指针,只回收了第
一个元素所占内存空间,产生回收不彻底的问题。加了方括号后就转化为指向数组的指针,
回收了整个数组。delete []的方括号中不需要填数组元素数,由系统自己确定。即便写了,
编译器也会忽略。
三、算法设计
(1)读入圆的等分点个数 n 与圆的半径 r。
2
(2)根据等分点个数计算金刚石图案的等分角
。
n
。α是用于调整金刚石图案的起始位置,
(3)计算金刚石图案的起始角
调整情况如图 1-8 所示。
2
2
(b)
(a)α=0
图 1-8 调整金刚石图案的方位
(4)将圆等分后的顶点坐标存储于数组 P 中。
(5)设计一个二重循环,代表起点的外层整型变量 i 从 i=0 循环到 i=n-2;代表终点
的内层整型变量 j 从 j=i+1 循环到 j=n-1。以 p[i]为起点,以 p[j]为终点连接各线段构成
金刚石图案。
四、案例设计
1. 设计 Test 工程模板
微软基类库(microsoft foundation class library,MFC)是以 C++形式封装的 Windows
API(application program interface),包含了 200 多个已经定义好的常用类。MFC 向导
(MFC AppWizard(exe))生成了一个应用程序框架,通过添加或修改框架代码可以完成具
体设计任务。作为上机操作的基础,首先讲解创建基于 MFC 的 Test 工程模板的步骤。
(1)在图 1-9 所示的 Visual C++集成开发环境中,选择 File|New 命令,弹出 New 对
话框,切换到 Projects 选项卡。在左边窗口中选择 MFC AppWizard(exe),在右边的 Project
name 文本框中输入工程名,这里输入 Test,在 Location 文本框中出现用于存放工程的目
录,这里设置为 D:\Test。其余保持默认值。如图 1-10 所示。单击 OK 按钮。
剩余22页未读,继续阅读
资源评论
xxpr_ybgg
- 粉丝: 6513
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功