`
jgsj
  • 浏览: 961337 次
文章分类
社区版块
存档分类
最新评论

用分形法画Koch Snowflake 曲线

 
阅读更多

前言

自然界中的许多景物,如山脉、云彩、树木、烟雾等,由于它们缺乏简单的宏观结构,找不出正规的特征,很难讲它们清晰地表达出来。分形几何方法的出现,为上述自然景物的计算机模拟与造型提供了一种强有力的工具。

德国数学家GeorgCantor1883年定义了一个在[0,1]上的点集,即著名的Cantor三分集。从作图的角度看,Cantor三分集是逐渐完成的。如果有一个线段a,则用两段小线段代替它,后者记为b,称之为生成元。

当生成元不同,就会推广出不同的分形曲线。如Koch雪花图案。

Koch雪花图案的生成】

Koch曲线的由瑞典数学家VonKoch1904年第一次描述的。

它的构造过程是:迭代出示把单位长线段去掉中间的三分之一,代之以底边在被除去的线段上的等边三角形的另外两边;以后每一步迭代都是上次图形中的每一折直线段中去掉中间三分之一,代之以类似的等边三角形的另外两边。

Koch曲线可以由简单的图元,称之为“生成元”迭代产生。

如下图所示的生产过程:

<!--EndFragment-->

经过多次迭代就可得到vonKoch雪花图案。

根据如上思想,下面介绍KochSnowflake曲线的生成。

KochSnowflake曲线】

当生成元为等腰直角三角形时,即将已有的一条线段用成直角的两条线段来代替(如下图),无限地迭代下去,就会扩展出另一分形曲线------KochSnowflake曲线。

<!--EndFragment-->

<!--EndFragment-->

KochSnowflake曲线生成元

其迭代算式为:(1

【生成步骤】

<!--EndFragment-->

将已有的条边用两条直角边来代替,这样无限迭代下去就可得到如上图所示的KochSnowflake图形。

【程序算法】

在程序中我们采用递归的方式画,即给定一条边的两个端点坐标,画出两条直角边,每一条直角边采用递归的方式画出另外两条直角边。直到给定的两个端点的距离小于等于1.5时停止。

伪代码如下:

Createfractals(两个点坐标A,B){

计算两点距离;

如果两点距离小于等于1.5返回。

采用如上迭代式(1)计算第三点坐标C。

递归调用:

Createfractals(两个点坐标A,C);

Createfractals(两个点坐标B,C);

}

【心得体会】

分形能够把大自然中很复杂的图形化解成简单图形的组合。其图形的生成过程与结果会让你领悟到科学与艺术的融合,数学与艺术审美上的统一使昨日枯燥的数学不再仅仅是抽象的哲理,而是具体的感受;不再仅仅是揭示一类存在,而是一种艺术创作,分形搭起了科学与艺术的桥梁。

而这种分形艺术不仅需要敏锐的洞察力,还需要有很深的数学功底和熟练的编程技能。敏锐的洞察力发现复杂问题的一般规律,很深的数学功底把这些规律用数学的方式表达出来,而编程技能把把所要实现的东西实现。

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics