利用VC实现一个漂亮的分形图形_树.docx_第1页
利用VC实现一个漂亮的分形图形_树.docx_第2页
利用VC实现一个漂亮的分形图形_树.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 3 卷 第 1 期2004 年 3 月太 原 师 范 学 院 学 报 (自然科学版)JOU RNAL O F TA IYUAN T EA CH ER S COLL EGE (N atu ral Science Edit io n)V o l. 3 N o. 1M a r.2004利用V C 实现一个漂亮的分形图形2树钟劲松(广州大学 计算机教育软件研究所, 广东 广州 510405)摘要 文章利用 V C 实现了一个漂亮的分形图形, 详细介绍了在 V C 环境下实现的关键步骤.关键词 分形; 生成元; 迭代文章编号 167222027 (2004) 0120020203 中图分类号 T P 311 文献标识码 A1分形 (F ractal) 的应用分形在自然科学的诸多领域如数学、物理、化学、材料科学、生命科学、地质、地理、天文、计算机乃至经 济、社会、艺术等极其广泛的领域有着重大的应用. 可以毫不夸张地“分形是大自然的几何学”,“分形处处可 见”. 例如可以用来设计壁纸、地板革和纺织品等的图案, 也可以用于计算机造型环境设计中 1 .在 分形图形中, 著名的分形图形有 Koch 曲线, M inkow sk“i H ilbert 曲线等, 笔者用V C 实现了一个漂亮的分形图形2树 (T ree).香肠”, Sierp in sk i 三角形, D ragon 曲线,2程序的实现2. 1利用A ppW iza rd 生成应用程序的框架1) 从 D eve lop er Stud io 的 F ile 菜单中选择 N ew , 然后在 N ew 对话框中单击 P ro ject 标签, 建立一个M FCA pp 2w iza rd (exe) 工程 T ree 2 .2 ) 在出现的对话框中选择单文档界面 (SD I) 的应用程序, 即在M FC A ppW iza rd2step 1 对话框中选择 “S ingle Docum en t”选项, 其中的对话框用默认的设置. 这样就生成了一个基于单文档的应用程序框架.2. 2相关的概念生成元: 分形图形的构造方式都有一个共同的特点, 即最终的图形 F 都是按照一定的规则 R 通过对初 始图形 F 0 不断修改得到的. 例如 Koch 曲线的修改规则 R 是将每一条直线段 F 0 用一条折线 F 1 替代, 我们 称 F 1 为该分形的生成元. 再例如在本文讨论的分形图形树, 其生成元如图 1 中中间的图所示, 由直线段 P 1P 2 经过怎样的变换, 才能变成生成元呢? 在直线段上取一点 P 3, P 3 分别逆时针、顺时针地绕点 P 2 旋转 120 , 得到了 P 4, P 5.2. 3程序代码1) 求直线上定比分点的坐标的函数定比分点CPo in t& CM yT reeV iew : : Po in tO fL am da (CPo in t &p 1, CPo in t &p 2, doub le lam da)CPo in t P 0 = P 1;if ( lam da = = - 1. 0) retu rn P 0;CPo in t P; 收稿日期: 2003201203作者简介: 钟劲松(19782) , 男, 湖南岳阳人, 广州大学计算机教育软件研究所计算机自动推理及应用软件硕士研究生.第 1 期钟劲松: 利用V C 实现一个漂亮的分形图形2树21图 1 树F ig. 1 T reeP. x = ( in t) ( (P 1. x+ lam da3 P 2. x) (1+ lam da) ) ; 已知比值, 求坐标的公式P. y = ( in t) ( (P 1. y+ lam da3 P 2. y) (1+ lam da) ) ; retu rn p;参考文献 3 中的算法应用于 Po in toflam da () 函数.2) 求 P 2 点绕 P 1 点旋转 arc 弧度的点的函数旋转点 P 2 绕 P 1 旋转CPo in t& CM yT reeV iew : : Po in tO fRo ta t io n (CPo in t &P1, CPo in t &P2, doub le arc)CPo in t P 3;in t xx = P 1. x, yy = P 1. y;in t x = P 2. x- xx, y = P 2. y- yy; P (x, y) 为原点移到 P 1 后 P 2 的新坐标in t x 0 = ( in t) (x3 co s (arc) -y3 sin (arc) ) ; P 0 (x0, y0) 为 P 2 旋转后的新坐标in t y0 = ( in t) (x3 sin (arc) + y3 co s (arc) ) ; P 3. x = x0 + xx; 相对坐标转换成实际坐标 P 3. y = y0 + yy;retu rn P 3;3) 生成元实现代码in t CM yT reeV iew : : D raw Graph (CDC 3 pDC, CPo in t &P1, CPo in t &P2, in t m ax)in t k, m ;index+ + ;if ( index M A X) retu rn M A X; k= index;m = index;CPo in t P 3, P 4, P 5;CPen 3 ppenO ld, penN ew ;penN ew. C reatePen (PS2SOL ID , (w id th2index) , R GB (122, 122, 255) ) ; 创建画笔 ppenO ld = pDC- SelectO b ject (&penN ew ) ; 选择对象到设备环境中22太 原 师 范 学 院 学 报 (自然科学版)第 3 卷pDC- M oveTo (p 1) ; pDC- L ineTo (p 2) ;P 3= Po in tO fL am da (P 1, P 2, 0. 5) ; P 3 为定比分点 P 1P 3P 3P 2 = 12P 4= Po in tO fRo ta t io n (P 2, P 3, 23 P I3) ; P 3 绕 P 2 旋转 120 P 5= Po in tO fRo ta t io n (P 2, P 4, 23 P I3) ;pDC- M oveTo (P 2) ; 画直线 P 2P 4pDC- L ineTo (P 4) ;pDC- M oveTo (P 2) ; 画直线 P 2P 5 pDC- L ineTo (P 5) ;D raw Graph (pDC, P 2, P 4, m ) ; index= m ;w id th= 9; 线宽设为 9, 目的是左边和右边的树枝宽度 (即线宽) 一致D raw Graph (pDC, P 2, P 5, k) ; index= k; pDC- SelectO b ject (ppenO ld) ; 释放对象所有的一切都准备好了后, 在视图类的O nD raw (CDC 3 pDC) 函数中调用D raw Graph () 就能得到漂亮的 分形图形. 上述算法用到了迭代, 即在函数体中调用自己的方法. 为什么要调用两次D raw Graph () 呢? 我们 可以看到上面的树是一个对称图形, 分为左右两部分, 分别对左右两部分进行迭代, 迭代的次数为M A X 次. 在观察图形的时候发现, 线变得越来越细, 这是因为使用 (w id th 2index) 代替了宽度. 每调用一次D raw Graph ( ) 函数, index 的值就会增加 1, 而w id th 的值在视图类的头文件中宏定义为 10. 如果你需要把自己的树打 扮得更“漂亮”些, 你可以把M A X 的值加大而使迭代的次数增多, 本文中的M A X = 7. 笔者实验, 如果把 M A X 值改为 10, 该树就会更枝繁叶茂. 还有如果你嫌弃树的颜色不够理想, 你也可以对 R GB ( r, g, b) 颜色 进行修改, 本文中的 r= 122, g= 122, b= 255.3总结本文是介绍了用V C 实现了一个简单的分形图形, 在编写程序的主要算法是迭代. 在该算法中涉及到一 些技巧, 希望能给大家一些帮助. 显然该程序还有一些不足, 例如我们可以在该工程中再增加一个对话框, 在 对话框中可以输入 P 1, P 2 点的坐标和定比分点的值, 可以添加一个 CBu t ton 调用颜色对话框来选择树的颜 色等. 本程序在W in2000,W inxp 系统下V C 编译器环境下编译、运行通过.参考文献: 1 李尚志, 陈发来, 吴耀华等. 数学实验M . 北京: 高等教育出版社, 1999 2 刘路放. V isual C+ + . 与面向对象程序设计教程M . 北京: 高等教育出版社, 2000 3 刘静华, 王永生. 最新V C+ + 绘图程序设计技巧与实例教程M . 北京: 科学出版社, 2001Im plem en t in g a Beaut if ul Frac ta l Image-Tree Us in g VCZhong J in song(T he In stitu te of Educat io nal Softw are, Guangzhou U n iversity, Guangzhou 510405, C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论