首页 > 代码库 > 龙曲线

龙曲线

趁着电影《侏罗纪世界》热映,恰好我也拉拉杂杂花了非常长时间把英文原著《侏罗纪公园》(Jurassic Park)读完了。我也说说和恐龙和这本书有关的事物,龙曲线。

技术分享
图1 《侏罗纪公园》小说封面

侏罗纪公园的原著作者是Michael Crichton。

小说中主要人物之中的一个是位数学家叫Ian Malcolm,他是研究混沌(不是抄手也不是云吞)理论的数学家。也是小说中InGen生物基因公司的顾问。

他一開始就反对建侏罗纪公园。尽管如今人类能够上外太空。能够造出毁灭地球的武器,但有些事情是人类是无能为力的,比方准确预測风暴,地震,股票市场等。这些事情不是不可决定性的,是决定性的。理论上知道初始状态。知道外在影响因素,是能够判断将来的状态的。但是对于混沌系统,细微的初始状态的不同,细微的外在因素的影响,会导致巨大的未来状态的变化.导致我们不能预測混沌系统的准确状态。

Ian Malcolm反对建侏罗纪公园就是基于此混沌理论。

InGen公司能够通过先进的基因技术、计算机技术等来复活侏罗纪的恐龙、植物等。能够在相对封闭的岛上建一个公园。他们甚至让复活的恐龙都是母的,不能自行生殖。他们觉得这样一切都人为可控。但是Ian Malcolm通过他的混沌理论分析觉得那是妄想。事情的发展证明了他的判断。一场暴风雨,一个公司内的叛徒。一次断电,计算机程序中的缺陷,计算机使用者的不细心。还有恐龙基因中含有的青蛙的基因片断等等微小因素,导致侏罗纪公园终于发展不可控制被军队接管并炸毁。

在《侏罗纪公园》小说几页插页中有龙曲线,从简单到复杂。龙曲线是一种自类似的分型曲线(self-similar fractal curves)。我理解的图形的自类似就是它从大的尺度看总体和从小的尺度看局部是类似的。

而分型曲线的特点是不管从不论什么尺度来看,它都反复同样的模式。一张图胜过千言万语,上图。

图2是《侏罗纪公园》中出现的龙曲线的第一张图,图3是最后一张图。第一张图的模式不断反复,就能够生成最后一张图,并且这个过程能够无限循环下去。Ian Malcolm在解说他的混沌理论时用龙曲线来类比。从龙曲线的第一代我们能想到它通过若干次迭代能发展出那么复杂而美丽的图形吗?好像比較困难。

混沌理论也是这样,我们即使知道了初始条件,也非常难推出兴许的发展。

这里的蝴蝶扇动了一下翅膀,我们能预料会在哪里生成飓风吗?我们知道大年初一的天气。能知道今年雨水怎么样吗?股票上周涨停,我们能知道下周是涨还是跌吗?好像都比較困难。

技术分享
图2 龙曲线第一代

技术分享
图3 龙曲线第七代

我们拿出一张白纸,对折,再对折,又对折,还对折。这样循环下去。如果纸都厚度是0.1毫米。那么对折20次后纸的累加厚度超过珠穆朗玛峰(everest),42次到月球(42是个特殊的数字,以后有机会写一篇文章)。94次就是整个可见宇宙的大小。

大家不信自己折一折。

这是倍增(或复利)的威力,以后有机会写一篇相关文章。今天我们先把折纸打开来。确保每一个折痕都是直角,那么折4次的时候就是图2龙曲线的第一代。折下去没几次就会生成图3的龙曲线。这样生成龙曲线的方法是不是非常easy呢?

龙曲线有物理学家研究。如John Heighway,本文图上的龙曲线就是以他命名的,叫Heighway龙曲线。有数学家和计算机科学家研究,如Donald Knuth,没错,写《计算机程序设计艺术》的图灵奖获得者。

写《侏罗纪公园》的作家Michael Crichton在研究,并且用在了自己写的书里。

还有我在研究,一个程序猿,您正在看的本文是我写的。当然,我是研究别人的研究成果,并且浅尝辄止。

我承认我是这些人里最没名气的。

如果你之前折纸遇到了困难,也能够用我的一个程序来生成龙曲线。戳龙曲线。

此程序用了一种叫L-System的方法,一种字符串重写(string rewriting system)方法。配合我的亲热数编程语言来生成龙曲线。有兴趣你能够试试。

《侏罗纪公园的》的结局显示了人类控制自然是困难的。人类在自然面前是渺小的,从这点来看。作者对待科技是悲观的。可生物会自己找寻出路,恐龙即使全是母的,也会找到出路生殖,从恐龙的角度看。我们应该乐观。

注:本文首发亲热数

參考资料

  • v=wCyC-K_PnRY">https://www.youtube.com/watch?v=wCyC-K_PnRY

  • http://en.wikipedia.org/wiki/Dragon_curve

  • http://en.wikipedia.org/wiki/Jurassic_Park_(novel)

  • http://mathworld.wolfram.com/LindenmayerSystem.html

  • http://scienceblogs.com/startswithabang/2009/08/31/paper-folding-to-the-moon/

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

龙曲线