分形算法及C++实现.doc

上传人:夏** 文档编号:543720585 上传时间:2023-02-06 格式:DOC 页数:8 大小:136.01KB
返回 下载 相关 举报
分形算法及C++实现.doc_第1页
第1页 / 共8页
分形算法及C++实现.doc_第2页
第2页 / 共8页
分形算法及C++实现.doc_第3页
第3页 / 共8页
分形算法及C++实现.doc_第4页
第4页 / 共8页
分形算法及C++实现.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《分形算法及C++实现.doc》由会员分享,可在线阅读,更多相关《分形算法及C++实现.doc(8页珍藏版)》请在金锄头文库上搜索。

1、分形算法及C+实现分形简介 我们人类生活的世界是一个极其复杂的世界,例如,喧闹的都市生活、变幻莫测的股市变化、复杂的生命现象、蜿蜒曲折的海岸线、坑坑洼洼的地面等等,都表现了客观世界特别丰富的现象。基于传统欧几里得几何学的各门自然科学总是把研究对象想象成一个个规则的形体,而我们生活的世界竟如此不规则和支离破碎,与欧几里得几何图形相比,拥有完全不同层次的复杂性。分形几何则提供了一种描述这种不规则复杂现象中的秩序和结构的新方法。 什么是分形几何?通俗一点说就是研究无限复杂但具有一定意义下的自相似图形和结构的几何学。什么是自相似呢?例如一棵苍天大树与它自身上的树枝及树枝上的枝杈,在形状上没什么大的区别

2、,大树与树枝这种关系在几何形状上称之为自相似关系;我们再拿来一片树叶,仔细观察一下叶脉,它们也具备这种性质;动物也不例外,一头牛身体中的一个细胞中的基因记录着这头牛的全部生长信息;还有高山的表面,您无论怎样放大其局部,它都如此粗糙不平等等。这些例子在我们的身边到处可见。分形几何揭示了世界的本质,分形几何是真正描述大自然的几何学。 例如,首先画一个等边三角形,把边长为原来三角形边长的三分之一的小等边三角形选放在原来三角形的三条边上,由此得到一个六角星;再将这个六角星的每个角上的小等边三角形按上述同样方法变成一个小六角星如此一直进行下去,就得到了雪花的形状。 2分形中的迭代函数系统 相似变换是指在

3、各个方向上变换的比率必须相同的一种比例变换;仿射变换是指在不同的方向上变换的比率可以不同的一种比例变换。 仿射变换的数学表达式为: 其中,a,b,c,d,e,f是仿射变换系数。 对于比较复杂的图形,可能需要多个不同的仿射变换来实现,而且,每个仿射变换被调用的概率不一定相同,所以引进一个参数概率p。a,b,c,d,e,f,p就构成了一个IFS码。 3分形中计算机模拟算法 递归算法。 字符串替换算法。 迭代函数系统算法。 逃逸时间算法。 4使用迭代函数系统算法对一棵树的C+实现程序 fractal.h文件: #ifndef _FRACTAL_H #define _FRACTAL_H #includ

4、e #include class CFractal private: float m77; float a; float b; float c; float d; float e; float f; float x; float y; float newx; float newy; int n; public: CFractal(); virtual CFractal(); void ifs(CDC* pDC); ; #endif fractal.cpp文件: #include stdafx.h #include fractal.h CFractal:CFractal() memset(m,0

5、,49); m00=-0.04; m01=0; m02=-0.19; m03=-0.47; m04=-0.12; m05=0.3;m06=0.25; m10=0.65; m11=0; m02=0; m13=0.56; m14=0.06; m15=1.56;m16=0.25; m20=0.41; m21=0.46; m22=-0.39; m23=0.61; m24=0.46; m25=0.4;m26=0.25; m30=0.52; m31=-0.35; m32=0.25; m33=0.74; m34=-0.48; m35=0.38;m36=0.25; x=0; y=0; a=0; b=0; c=

6、0; d=0; e=0; f=0; newx=0; newy=0; n=300000; CFractal:CFractal() void CFractal:ifs(CDC* pDC) srand( (unsigned)time( NULL ) ); float r; while (n0) r=(double)rand()/RAND_MAX; char buffer100; if (r=m06) a=m00; b=m01; c=m02; d=m03; e=m04; f=m05; else if (r=(m06+m16) a=m10; b=m11; c=m12; d=m13; e=m14; f=m15; else if (rSetPixel( 300+100*x, 400-100*y, RGB(x*50*r,r*100,y*200*r); -n; 可以在此程序上扩展,实现其他的一些分形图。 调用: void CFractralView:Onfractral1() / TODO: 在此添加命令处理程序代码 CDC *pDC=GetDC(); CFractal *f=new CFractal(); f-ifs(pDC); ReleaseDC(pDC); 5程序截图: 本文来自CSDN博客,转载请标明出处:http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号