




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计计 算算 机机 图图 形形 学学 课课 程程 实实 验验 报报 告告 风形几何风形几何 姓 名 专 业 计算机科学与技术 学 号 指 导 教 师 完 成 日 期 目目 录录 一 任务描述一 任务描述 1 二 算法原理二 算法原理 2 1 1 三维空间 2 1 2 分形几何 3 三 算法实现三 算法实现 3 3 1 主窗体 3 3 2 编辑菜单资源 4 3 3 添加消息处理函数 4 3 4 添加代码 5 3 5 设计结果 13 四 总结四 总结 14 一 一 任务描述任务描述 显示器只能用二维物体表示三维物体 因此三维物体就要靠投影来降低维 数得到平面图形 程序中给出了三维坐标 用以承托分形树 显示三维效果 为了再现真是世界 必须选择新的工具 分形几何学应用而生 L 系统是 一种形式语言 有字符串描述的公理 生成规则组成 L 系统中需要对每个字 母进行解释 并赋予特定的操作 用 L 系统绘制的植物可以达到非常逼真的艺 术效果 L 系统主要研究植物的生长过程 程序主要实现了两方面的内容 一 绘制了三维坐标系 二 绘制了 分形树 图 1 1 1 任务 一 截图 图 1 1 2 任务 二 截图 二 二 算法原理算法原理 屏幕坐标系是二维坐标系 原点位于屏幕左上角 x 轴水平向右 y 轴竖直 向下 如图 2 1 1 图 2 1 1 屏幕坐标系 设屏幕客户区水平方向最大值为 Xmax 垂直方向最大值为 Ymax 改造坐标 系如图 2 1 2 坐标系原点位于屏幕中心 O Xmax 2 Ymax 2 x 轴水平向右 y 轴垂直向下 图 2 1 2 改造后的屏幕坐标系 建立三维坐标系 如图 2 1 3 三维坐标系原点位于屏幕中心 x y z 成右 手系 x 轴和 y 轴或 z 轴的最小夹角为 45 度 图 2 1 3 三维坐标系 在绘制植物时 需要处理分支结构 在分支节点出会出现多个行走方向 应此需要记录每一个分支点 以便沿一个分支点处理完还可以回到该分支点 处理另一个方向 绘图规则如下 1 F 代表主干和旁支 步长为 Len 2 树枝生长方向 逆时针方向转过角度为正 3 树枝生长方向 顺时针方向转过角度为负 4 存储分支点 5 释放分支点 替换规则如下 字母表为 F 初始字母为 F 生成规则 F FFF F F F F FF 三 算法实现 3 1 主窗体 如图 3 1 1 所示是程序主界面 显示在用户面前的是一副三维坐标图 点 击工具栏上的图标 或者点击菜单栏 即可弹出如图 3 1 2 的对话框 在对话 框中输入不同的数值即可画出不同的风形树 风形树在坐标系的衬托下显示了 它不同的色彩 当输入的数据超出范围时 系统就会弹出报错对话框 请用户 重新输入 图 3 1 1 程序主界面 3 1 2 输入参数对话框 3 2 编辑菜单资源 设计图 3 1 1 的菜单项 在工作区的 ResourceView 标签中 单击 Menu 项 然后双击其子项 IDR MAINFRAME 并根据表 1 的定义编辑菜单资源 表 1 菜单资源表 菜单标题菜单项标题标示符 ID 文件退出ID APP EXIT 绘图GrassID MENUGrass 帮助关于 TestID APP ABOUT 3 3 添加消息处理函数 利用建立类向导为程序添加与菜单项相关的消息处理函数 ClassName 栏中选择 CTestView 根据表 2 建立如下的消息映射函数 类向导会自动完成有 关的函数声明 表 2 菜单项消息处理函数 菜单项 ID消息消息处理函数 ID MENUGrassCONMMANOnMENUGrass 3 4 添加代码 添加 StateNode 类 添加相应的成员变量 double x double y double afa 添加对话框类 并为 IDC EDIT1 IDC EDIT 2 IDC EDIT3 关连成员变量 为 并添加如下代码 void CInputDlg OnShowWindow BOOL bShow UINT nStatus CDialog OnShowWindow bShow nStatus TODO Add your message handler code here GetDlgItem IDC EDIT3 SetFocus CEdit GetDlgItem IDC EDIT3 SetSel 0 1 在 TestView h 中添加变量的定义和函数的声明 其作用在注释中给 出 public void GetMaxX 获得屏幕的最大 x 值函数 void GetMaxY 获得屏幕的最大 y 值函数 void Initial int 文法模型 void Grass double double 分形草函数 protected int MaxX MaxY 屏幕 x 和 y 的最大坐标 double ax ay 起点坐标 CString Axiom Rule NewRule NewRuleTemp 绘图规则 StateNode Stack 1024 结点栈 Int StackPushPos 结点栈指针 在 TestView cpp 添加 include math h 数学头文件 define PI 3 1415926 PI 的宏定义 include InputDlg h 对话框 define ROUND x int x 0 5 四舍五入 void CTestView OnDraw CDC pDC CTestDoc pDoc GetDocument ASSERT VALID pDoc TODO add draw code for native data here CRect Rect GetClientRect CDC MemDC 定义一个显示设备对象 CBitmap MemBitmap 定义一个位图对象 MemDC CreateCompatibleDC pDC MemBitmap CreateCompatibleBitmap pDC Rect Width Rect Height CBitmap pOldBitmap MemDC SelectObject MemDC FillSolidRect Rect RGB 255 255 255 GetMaxX GetMaxY CPen NewPen OldPen NewPen CreatePen PS SOLID 1 RGB 255 0 0 OldPen MemDC SelectObject CPoint po MaxX 2 20 MaxY 2 CPoint px MaxX 20 MaxY 2 CPoint py MaxX 2 20 0 CPoint pz MaxX 2 MaxY 2 20 MaxY MemDC MoveTo po MemDC LineTo px MemDC MoveTo po MemDC LineTo py MemDC MoveTo po MemDC LineTo pz pDC BitBlt 0 0 Rect Width Rect Height MemDC SelectObject pOldBitmap MemBitmap DeleteObject MemDC DeleteDC void CTestView GetMaxX 求屏幕最大 x 值 CRect Rect GetClientRect MaxX Rect right void CTestView GetMaxY 求屏幕最大 y 值 CRect Rect GetClientRect MaxY Rect bottom void CTestView Initial int n 文法模型 StackPushPos 0 Axiom F Rule FFF F F F F FF NewRule Axiom NewRuleTemp Empty int Length NewRule GetLength for int i 1 i n i 从 n 1 开始替换 n 0 时 就是 F int Pos 0 for int j 0 j Length j 规则替换 if NewRule j Axiom NewRuleTemp Rule Pos NewRuleTemp GetLength 1 else NewRuleTemp NewRule j Pos NewRule NewRuleTemp NewRuleTemp Empty Length NewRule GetLength void CTestView Grass double th double l 绘图规则 CClientDC dc this CPen MyPen POldPen MyPen CreatePen PS SOLID 1 RGB 0 180 0 POldPen dc SelectObject if NewRule IsEmpty 字符串空返回 return else StateNode CurrentNode NextNode CurrentNode x ax CurrentNode y ay CurrentNode afa 90 int Len NewRule GetLength dc MoveTo ROUND ax ROUND MaxY ay for int i 0 iSetWindowText JOB GetMaxX GetMaxY ax MaxX 2 ay 0 起点坐标 Initial n Grass th l 3 5 设计结果 1 进入程序点击对话框 输入不同的参数 绘制出了不同的分形树 1 当输入保持默认值时 绘制的风形树如下图 3 5 1 3 5 1 分形树 一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度铝合金门窗行业产品质量检测与认证合同
- 2025版航空货运代理服务合同示范文本
- 2025版婚宴婚礼司仪及主持合同范本
- 二零二五年度公路长途大件货物运输合同范本
- 2025版房地产买卖代理合同书(含税费结算)
- 二零二五年度物流运输货款担保服务合同范本
- 2025年版企业内部食堂承包经营合同范本大全
- 2025版大学生兼职家教服务合同书模板
- 2025版能源环保广告合作服务合同
- 部门成立策划书
- 09S304 卫生设备安装图集
- 酸雾抑制剂化学品安全技术说明书
- 重点监管的危险化学品名录(完整版)
- 解三角形专题 - (解析版)
- 高等教育心理学学习提纲整理
- 桩基施工安全检查表
- 水玻璃有机酯自硬砂工艺简介
- 2022年公司管理制度发布流程
- XXX医院管道护理工作总结
- 超清地质年代表
- 中职 物联网 试讲题目2
评论
0/150
提交评论