论文部分内容阅读
摘 要:Matlab具有强大的科学运算和灵活的程序设计,可提供高质量的图像可视化,已经在很多领域得到广泛应用。分形是非线性科学的重要分支,分形几何学却具有尺度上的对称性,分型图形是计算机图形学和分形理论相结合的产物。该文利用Matlab强大的编程工具和图形显示功能实现Cantor集、Koch曲线、分形树图形,这对数学类、计算机图形学和相关专业类研究人员有一定的参考价值。
关键词:分形 Matlab Cantor集 Koch曲线
中图分类号:TP312 文献标识码:A 文章编号:1674-098X(2017)01(b)-0105-02
Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。Matlab提供了强大的科学运算、灵活的程序设计、高质量的图像可视化以及便捷地与其他程序和语言接口的功能[1,2]。目前,Matlab已經应用到很多科研领域,如,生物信息学[3]、统计学[4]、信号处理[5]、小波分析[6]等。
分形(Fractal)是非线性科学的一个重要分支,应用于自然科学和社会科学的众多领域[7-9]。1973年,数学家Mandelbrot在法兰西学院讲课时,首次提出了分形的思想。他给分形下的定义就是:一个集合形状,可以细分为若干部分,而每一部分都是整体的精确或不精确的相似形。分形的基本特征是具有标度不变性。其研究的图形是非常不规则和不光滑的,已失去了通常的几何对称性。但是,在不同的尺度下进行观测时,分形几何学却具有尺度上的对称性或称标度不变性。
分形图形是计算机图形学和分形理论相结合的产物,在电脑模拟研究具有分形特征物体的图像。分形的计算机生成问题具有明显的挑战性,它使传统数学中无法表达的形态(如,山脉、花草等)得以表达。分形图案在自然界真实物体模拟、仿真形体生成、计算机动画、艺术装饰纹理、图案设计和创意制作等具有广泛的应用价值。
该文中利用强大的编程工具Matlab来实现Cantor集、Koch曲线、分形树图形,这对数学类、计算机图形学和相关专业类研究人员有一定的参考价值。
1 Cantor集
取一条长度为1的直线段,将它三等分,去掉中间一段,留剩下两段,再将剩下的两段再分别三等分,各去掉中间一段,剩下更短的四段,将这样的操作一直继续下去,直至无穷,由于在不断分割舍弃过程中,所形成的线段数目越来越多,长度越来越小,在极限的情况下,得到一个离散的点集,称为Cantor集。具体代码如下。
function f=cantor(ax,ay,bx,by)
c=0.2;
d=2;
if (bx-ax)>c
x=[ax,bx];y=[ay,by];hold on;
plot(x,y,’LineWidth’,5);hold off;
cx=ax+(bx-ax)/3;
cy=ay-d;
dx=bx-(bx-ax)/3;
dy=by-d;
ay=ay-d;
by=by-d;
cantor(ax,ay,cx,cy);
cantor(dx,dy,bx,by);
end
end
执行cantor(1,4,10,4),结果显示如图1。
2 Koch曲线
Koch曲线,设想从一条直线段开始,将线段中间1/3部分用等边三角形的两条边代替,形成具有5个结点的图形,在新的图形中,又将图中每一直线段中间的1/3部分都用一等边三角形的两条边代替,再次形成新的图形,以此重复,直至无穷。外界的变得原来越细微曲折,形状接近理想化的雪花。具体代码如下。
function f=Koch(ax,ay,bx,by,c)
if (bx-ax)^2+(by-ay)^2 x=[ax,bx];y=[ay,by];
plot(x,y,’LineWidth’,2);
axis equal
hold on;
else
cx=ax+(bx-ax)/3; cy=ay+(by-ay)/3;
ex=bx-(bx-ax)/3; ey=by-(by-ay)/3;
l=sqrt((ex-cx)^2+(ey-cy)^2);
alpha=atan((ey-cy)/(ex-cx));
if (alpha>=0&(ex-cx)<0)|(alpha<=0&(ex-cx)<0)
alpha=alpha+pi;
end
dy=cy+sin(alpha+pi/3)*l;
dx=cx+cos(alpha+pi/3)*l;
Koch(ax,ay,cx,cy,c);
Koch(ex,ey,bx,by,c);
Koch(cx,cy,dx,dy,c);
Koch(dx,dy,ex,ey,c);
end
end
执行Koch(0,0,120,0,10),结果显示如图2。
3 分形树
一条线段,以线段的终点为起点向两边分出一定的角度、长度的两条线段,分出的线段的终点再做相同处理,以此类推,生成一种分形树。具体代码如下。
function fractaltree(n,ax,ay,len,angle) bx=ax+len*cos(angle);
by=ay+len*sin(angle);
plot([ax,bx],[ay,by]);
angle1=pi/6;
angle2=pi/9;
hold on
if n==0
return;
end
fractaltree(n-1,bx,by,0.6*len,angle+angle1);
fractaltree(n-1,bx,by,0.7*len,angle-angle2);
end
執行fractaltree(12,150,20,50,pi/2),结果显示如图3。
4 结语
分形形态是自然界普遍存在的,研究分形,是探讨自然界的复杂事物的客观规律及其内在联系的需要。分形提供了描述自然形态的几何学方法,使得在计算机上可以从少量数据出发,对复杂的自然景物进行逼真的模拟,并启发人们利用分形技术对信息做大幅度的数据压缩。它以其独特的手段来解决整体与部分的关系问题,利用空间结构的对称性和自相似性,采用各种模拟真实图形的模型,使整个生成的景物呈现出细节的无穷回归的性质,丰富多彩,具有奇妙的艺术魅力。
参考文献
[1] 姜健飞.数值分析及其MATLAB实验[M].北京:清华大学出版社,2015.
[2] 史峰.MATLAB智能算法30个案例分析[M].北京:北京航空航天大学出版社,2015.
[3] 张乐平,黄非,闵波,等.基于MATLAB生物信息学工具箱构建分子系统发生树[J].医学信息学杂志,2010,31(6):34-37.
[4] 张林泉.MATLAB在统计学实验教学中的应用[J].高师理科学刊,2011,31(1):84-87.
[5] 刘波,文忠.MATLAB信号处理[M].北京:电子工业出版社,2006.
[6] 张德丰.MATLAB小波分析[M].北京:机械工业出版社,2009.
[7] 刘莹,胡敏,余桂英,等.分形理论及其应用[J].江西科学,2006,24(2):205-209.
[8] 孙霞,吴自勤,黄畵.分形原理及应用[M].合肥:中国科学技术大学出版社,2003.
[9] 王达.几类复系统分形的特性分析与控制[D].山东大学,2016.
关键词:分形 Matlab Cantor集 Koch曲线
中图分类号:TP312 文献标识码:A 文章编号:1674-098X(2017)01(b)-0105-02
Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。Matlab提供了强大的科学运算、灵活的程序设计、高质量的图像可视化以及便捷地与其他程序和语言接口的功能[1,2]。目前,Matlab已經应用到很多科研领域,如,生物信息学[3]、统计学[4]、信号处理[5]、小波分析[6]等。
分形(Fractal)是非线性科学的一个重要分支,应用于自然科学和社会科学的众多领域[7-9]。1973年,数学家Mandelbrot在法兰西学院讲课时,首次提出了分形的思想。他给分形下的定义就是:一个集合形状,可以细分为若干部分,而每一部分都是整体的精确或不精确的相似形。分形的基本特征是具有标度不变性。其研究的图形是非常不规则和不光滑的,已失去了通常的几何对称性。但是,在不同的尺度下进行观测时,分形几何学却具有尺度上的对称性或称标度不变性。
分形图形是计算机图形学和分形理论相结合的产物,在电脑模拟研究具有分形特征物体的图像。分形的计算机生成问题具有明显的挑战性,它使传统数学中无法表达的形态(如,山脉、花草等)得以表达。分形图案在自然界真实物体模拟、仿真形体生成、计算机动画、艺术装饰纹理、图案设计和创意制作等具有广泛的应用价值。
该文中利用强大的编程工具Matlab来实现Cantor集、Koch曲线、分形树图形,这对数学类、计算机图形学和相关专业类研究人员有一定的参考价值。
1 Cantor集
取一条长度为1的直线段,将它三等分,去掉中间一段,留剩下两段,再将剩下的两段再分别三等分,各去掉中间一段,剩下更短的四段,将这样的操作一直继续下去,直至无穷,由于在不断分割舍弃过程中,所形成的线段数目越来越多,长度越来越小,在极限的情况下,得到一个离散的点集,称为Cantor集。具体代码如下。
function f=cantor(ax,ay,bx,by)
c=0.2;
d=2;
if (bx-ax)>c
x=[ax,bx];y=[ay,by];hold on;
plot(x,y,’LineWidth’,5);hold off;
cx=ax+(bx-ax)/3;
cy=ay-d;
dx=bx-(bx-ax)/3;
dy=by-d;
ay=ay-d;
by=by-d;
cantor(ax,ay,cx,cy);
cantor(dx,dy,bx,by);
end
end
执行cantor(1,4,10,4),结果显示如图1。
2 Koch曲线
Koch曲线,设想从一条直线段开始,将线段中间1/3部分用等边三角形的两条边代替,形成具有5个结点的图形,在新的图形中,又将图中每一直线段中间的1/3部分都用一等边三角形的两条边代替,再次形成新的图形,以此重复,直至无穷。外界的变得原来越细微曲折,形状接近理想化的雪花。具体代码如下。
function f=Koch(ax,ay,bx,by,c)
if (bx-ax)^2+(by-ay)^2
plot(x,y,’LineWidth’,2);
axis equal
hold on;
else
cx=ax+(bx-ax)/3; cy=ay+(by-ay)/3;
ex=bx-(bx-ax)/3; ey=by-(by-ay)/3;
l=sqrt((ex-cx)^2+(ey-cy)^2);
alpha=atan((ey-cy)/(ex-cx));
if (alpha>=0&(ex-cx)<0)|(alpha<=0&(ex-cx)<0)
alpha=alpha+pi;
end
dy=cy+sin(alpha+pi/3)*l;
dx=cx+cos(alpha+pi/3)*l;
Koch(ax,ay,cx,cy,c);
Koch(ex,ey,bx,by,c);
Koch(cx,cy,dx,dy,c);
Koch(dx,dy,ex,ey,c);
end
end
执行Koch(0,0,120,0,10),结果显示如图2。
3 分形树
一条线段,以线段的终点为起点向两边分出一定的角度、长度的两条线段,分出的线段的终点再做相同处理,以此类推,生成一种分形树。具体代码如下。
function fractaltree(n,ax,ay,len,angle) bx=ax+len*cos(angle);
by=ay+len*sin(angle);
plot([ax,bx],[ay,by]);
angle1=pi/6;
angle2=pi/9;
hold on
if n==0
return;
end
fractaltree(n-1,bx,by,0.6*len,angle+angle1);
fractaltree(n-1,bx,by,0.7*len,angle-angle2);
end
執行fractaltree(12,150,20,50,pi/2),结果显示如图3。
4 结语
分形形态是自然界普遍存在的,研究分形,是探讨自然界的复杂事物的客观规律及其内在联系的需要。分形提供了描述自然形态的几何学方法,使得在计算机上可以从少量数据出发,对复杂的自然景物进行逼真的模拟,并启发人们利用分形技术对信息做大幅度的数据压缩。它以其独特的手段来解决整体与部分的关系问题,利用空间结构的对称性和自相似性,采用各种模拟真实图形的模型,使整个生成的景物呈现出细节的无穷回归的性质,丰富多彩,具有奇妙的艺术魅力。
参考文献
[1] 姜健飞.数值分析及其MATLAB实验[M].北京:清华大学出版社,2015.
[2] 史峰.MATLAB智能算法30个案例分析[M].北京:北京航空航天大学出版社,2015.
[3] 张乐平,黄非,闵波,等.基于MATLAB生物信息学工具箱构建分子系统发生树[J].医学信息学杂志,2010,31(6):34-37.
[4] 张林泉.MATLAB在统计学实验教学中的应用[J].高师理科学刊,2011,31(1):84-87.
[5] 刘波,文忠.MATLAB信号处理[M].北京:电子工业出版社,2006.
[6] 张德丰.MATLAB小波分析[M].北京:机械工业出版社,2009.
[7] 刘莹,胡敏,余桂英,等.分形理论及其应用[J].江西科学,2006,24(2):205-209.
[8] 孙霞,吴自勤,黄畵.分形原理及应用[M].合肥:中国科学技术大学出版社,2003.
[9] 王达.几类复系统分形的特性分析与控制[D].山东大学,2016.