曼德勃罗特集分形

简介: 和混沌密切相关的另一门学科是分形学。分形是由IBM公司的科学家曼德勃罗特在1975年提出的,作为计算机图形学的一个分支,用分形的方法生成的图像向人们展示了在简单的数学模型中蕴涵的内在美、对称性和复杂性。
    和混沌密切相关的另一门学科是分形学。分形是由IBM公司的科学家曼德勃罗特在1975年提出的,作为计算机图形学的一个分支,用分形的方法生成的图像向人们展示了在简单的数学模型中蕴涵的内在美、对称性和复杂性。下面的第一幅图被称作曼德勃罗特集,其余几幅分别是对它的某个细节放大得到的。
    曼德勃罗特集的数学模型非常简单。假设有复数Z和μ,用下式迭代计算:Z=Z2+μ,由于μ的取值不同,经过若干次数迭代以后Z的幅值可能趋向无穷,也可能保持有界,曼德勃罗特集就是那些使Z保持有界的μ的集合,把μ在复平面上的分布作成图像,就像上面演示的那样具有极其复杂的结构。
下面的程序用TC2.0编写, 假设屏幕的分辨率为640×480。
#include <graphics.h>
main(){
int nThre=100; /* 其中nThre代表设置的门限值,当迭代后Z的幅值的平方大于nThre则认为趋于无穷*/
int xCord,yCord,nColor,nTimes; /*xCord和yCord分别代表平面上的点的坐标位置,nColor代表作图时所使用的颜色,nTimes表示迭代的次数 */
float reP,rePmin=-1.5,rePmax=0.75; /*reP表示由平面上一点所代表的μ值的实部,rePmax、rePmin分别代表μ值实部可取的最大值和最小值*/
float imP,imPmin=-1.5,imPmax=1.5; /*imP、imPmax和imPmin分别代表μ的虚部及其容许的最大值和最小值*/
float reZ,imZ,tmpReZ,deltImP,deltReP,absZ;
/*reZ和imZ分别代表Z值的实部和虚部,deltImP、deltReP表示每一个象素的代表的实部和虚部值的大小,absZ代表Z值的幅值 */
int GraphDriver=DETECT,GraphMode; /*初始化图形显示*/
initgraph(&GraphDriver,&GraphMode,“ ");
deltReP=(rePmax-rePmin)/640; /*计算屏幕上一个像素表*/
deltImP=(imPmax-imPmin)/480; /*和虚部值的大小示的 */
for(xCord=1;xCord<641;xCord++)
for (yCord=1;yCord<481;yCord++){
reP=rePmin+deltReP*xCord; /*计算屏幕上一点所*/
imP=imPmin+deltImP*yCord;/*代表的μ值大小*/
reZ=0; imZ=0;
for(nTimes=0;nTimes<160;nTimes++){
tmpReZ=reZ*reZ-imZ*imZ+reP; /*计算迭代后的Z*/
imZ=2*reZ*imZ+imP;/*值及其幅值大小*/
reZ=tmpReZ;absZ=reZ*reZ+imZ*imZ;
if (absZ>nThre){nColor=nTimes/10;break;}
/*假如幅值的平方大于门限值终止迭代*/
nColor=0;}
putpixel(xCord,yCord,nColor); }/*用指定的颜色作点*/
getch();
}
    上面的程序中,可以通过改变imPmin、imPmax以及rePmin与rePmax的值来对图像的局部细节进行放大,从而可以观察到更加精美复杂的图像,领悟分形图像的神韵。
    曼德勃罗特集是人们发现的最早的分形图形之一,也是人们研究最多的分形图形之一,今年的菲尔兹奖(数学界的最高奖)得主麦克马兰就是因为在曼德勃罗特集研究中的成绩而获此殊荣的。这些年关于分形的研究已经渗透到科学领域的各个学科,在计算机领域利用分形的方法来对自然景物进行逼真的模拟是一个很具挑战性的研究方向。 
本文章来自 www.21shipin.com  21视频教程网
一个分形图形_C语言程序设计教程 原文链接: http://www.21shipin.com/html/61703.shtml
相关文章
|
6月前
|
算法 Java
二叉树递归分形,牛顿分形图案
二叉树递归分形,牛顿分形图案
37 0
|
7月前
|
机器学习/深度学习 算法 C#
C# | 凸包算法之Andrew‘s,获取围绕一组点的凸多边形的轮廓点
这篇关于凸包算法的文章,本文使用C#和Andrew’s算法来实现凸包算法。 首先消除两个最基本的问题: 什么是凸包呢? 凸包是一个包围一组点的凸多边形。凸多边形是指多边形中的每个内角都小于180度的多边形。 凸包算法有什么用呢? 凸包算法的作用是找到这个凸多边形,并且使用最少的点来绘制出它的轮廓。凸包算法在计算机图形学、计算几何和机器学习等领域中有着广泛的应用。
183 0
|
算法
秒懂算法 | 计算几何:圆
计算几何的基础是点积和叉积,它们定义了向量的大小和方向的关系,是其他计算几何概念和算法的出发点。在点积和叉积的基础上,本篇重点介绍圆覆盖。 计算几何题目的代码大多繁琐冗长,因此掌握模板代码是学习计算几何的关键。本篇精心组织了经典的几何模板
18133 1
秒懂算法 | 计算几何:圆
|
机器学习/深度学习 决策智能
矩阵分析 (八) 矩阵的直积
矩阵分析 (八) 矩阵的直积
482 0
C++ 绘制圣诞树 (找规律 多层循环)
C++ 绘制圣诞树 (找规律 多层循环)
719 0
|
机器学习/深度学习
排列组合、古典概型、几何概型与伯努利概型
排列组合、古典概型、几何概型与伯努利概型
|
前端开发 数据可视化 图形学
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
160 0
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
洛谷P3194 [HNOI2008]水平可见直线(计算几何+单调栈)
洛谷P3194 [HNOI2008]水平可见直线(计算几何+单调栈)
111 0
洛谷P3194 [HNOI2008]水平可见直线(计算几何+单调栈)
143.Mandelbrot分形图案
143.Mandelbrot分形图案
94 0
matlab三维山峰/山脉/山地曲面数据图
matlab三维山峰/山脉/山地曲面数据图 可以使用peaks函数。比如直接peaks(80): peaks(80) z = 3*(1-x).
2360 0