分形几何与风水术 碎形幾何與堪輿
用分形几何的方法研究杨公风水朮,有兴趣者发帖. 标度与生成元之确立,按杨公之法门,标度为三十厘米,生成元份为五衱?九级?设时间分形否?请高手讨论!<br><br>地学与分形几何密切相关,五星,九星相应于生成元,拓朴空间之分维使峦头可量化.分形几何创于上世纪六十年代末,是处理非线性空间的有力工具.<br><br>希望有分形几何,或流形柘朴分析能力的风水爱好者参与创建中国风水之现代解释学说.<br> 小混混在此乱说,大大们莫见笑. 怎么没人跟帖? 你先介绍一下什么是混形几何吧。 分形几何的思想出现在1967年度美国<科学>{英国海岸线有多长}这篇论文之中.作者是美籍法国数学家Mandelbrot B B.分形几何这个词1975年被正式提出.分形几何应用于数学,物理,化学,生物,计算桃,医学,特别是中医,地理学,生态,景观学,城市规划,音乐,美术等.它的产生使非线性问题得到了较好的解读.分形几何的中心概念是:自相似性.自然分形,时间分形,社会分形,思维分形是其主要内容.介绍一本国内的著作<流形的拓扑学>作者:苏竞存,1955年毕业亍台湾大学,现任美国麻省州立大学教授.要阅读此书需备的数学基础是:微积分,微分几何,群论,李代数,概率等. 用分形几何去研究杨公风水术,其关键是:杨公风水术的正统思想是什么?如何解读四经,分形几何只是个工具,例如:五星之概念当属自然分形,九星是属时间分形?如没有很真实掌握杨公风水术的理论和大量实践是不可以分划的. <P> </P><P></P>
<P><A href="http://baike.baidu.com/view/44498.htm">http://baike.baidu.com/view/44498.htm</A></P>
<P>分形几何 <BR>开放分类: 数学、计算机、物理学、混沌、分形<BR><BR>普通几何学研究的对象,一般都具有整数的维数。比如,零维的点、一维的线、二维的面、三维的立体、乃至四维的时空。在20世纪70年代末80年代初,产生了新兴的分形几何学(fractal geometry),空间具有不一定是整数的维,而存在一个分数维数。这是几何学的新突破,引起了数学家和自然科学者的极大关注。根据物理学家李荫远院士的建议,大陆将fractal一开始就定译为“分形”,而台湾学者一般将fractal译作“碎形”。<BR><BR>分形几何的产生<BR><BR>客观自然界中许多事物,具有自相似的“层次”结构,在理想情况下,甚至具有无穷层次。适当的放大或缩小几何尺寸,整个结构并不改变。不少复杂的物理现象,背后就是反映着这类层次结构的分形几何学。<BR>客观事物有它自己的特征长度,要用恰当的尺度去测量。用尺来测量万里长城,嫌太短;用尺来测量大肠杆菌,又嫌太长。从而产生了特征长度。还有的事物没有特征尺度,就必须同时考虑从小到大的许许多多尺度(或者叫标度),这叫做“无标度性”的问题。 如物理学中的湍流,湍流是自然界中普遍现象,小至静室中缭绕的轻烟,巨至木星大气中的涡流,都是十分紊乱的流体运动。流体宏观运动的能量,经过大、中、小、微等许许多度尺度上的漩涡,最后转化成分子尺度上的热运动,同时涉及大量不同尺度上的运动状态,就要借助“无标度性”解决问题,湍流中高漩涡区域,就需要用分形几何学。<BR>在二十世纪七十年代,法国数学家芒德勃罗(B.B.Mandelbrot)在他的著作中探讨了“英国的海岸线有多长”这个问题。这依赖于测量时所使用的尺度。<BR>如果用公里作测量单位,从几米到几十米的一些曲折会被忽略;改用米来做单位,测得的总长度会增加,但是一些厘米量级以下的就不能反映出来。由于涨潮落潮使海岸线的水陆分界线具有各种层次的不规则性。海岸线在大小两个方向都有自然的限制,取不列颠岛外缘上几个突出的点,用直线把它们连起来,得到海岸线长度的一种下界。使用比这更长的尺度是没有意义的。还有海沙石的最小尺度是原子和分子,使用更小的尺度也是没有意义的。在这两个自然限度之间,存在着可以变化许多个数量级的“无标度”区,长度不是海岸线的定量特征,就要用分维。<BR>数学家柯赫(Koch)从一个正方形的“岛”出发,始终保持面积不变,把它的“海岸线”变成无限曲线,其长度也不断增加,并趋向于无穷大。以后可以看到,分维才是“Koch岛”海岸线的确切特征量,即海岸线的分维均介于1到2之间。<BR>这些自然现象,特别是物理现象和分形有着密切的关系,银河系中的若断若续的星体分布,就具有分维的吸引子。多孔介质中的流体运动和它产生的渗流模型,都是分形的研究对象。这些促使数学家进一步的研究,从而产生了分形几何学。<BR>电子计算机图形显示协助了人们推开分形几何的大门。这座具有无穷层次结构的宏伟建筑,每一个角落里都存在无限嵌套的迷宫和回廊,促使数学家和科学家深入研究。<BR>法国数学家芒德勃罗这位计算机和数学兼通的人物,对分形几何产生了重大的推动作用。他在1975、1977和1982年先后用法文和英文出版了三本书,特别是《分形:形、机遇和维数》以及《自然界中的分形几何学(Fractal Geometry of Nature)》,开创了新的数学分支:分形几何学。“分形”(fractal)这个词正是芒德勃罗在1975年造出来的,词根是拉丁文的fractus,是“破碎”的意思。<BR><BR>分形几何的内容<BR><BR>分形几何学的基本思想是:客观事物具有自相似的层次结构,局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似性,成为自相似性。例如,一块磁铁中的每一部分都像整体一样具有南北两极,不断分割下去,每一部分都具有和整体磁铁相同的磁场。这种自相似的层次结构,适当的放大或缩小几何尺寸,整个结构不变。<BR>维数是几何对象的一个重要特征量,它是几何对象中一个点的位置所需的独立坐标数目。在欧氏空间中,人们习惯把空间看成三维的,平面或球面看成二维,而把直线或曲线看成一维。也可以稍加推广,认为点是零维的,还可以引入高维空间,对于更抽象或更复杂的对象,只要每个局部可以和欧氏空间对应,也容易确定维数。但通常人们习惯于整数的维数。<BR>分形理论认为维数也可以是分数,这类维数是物理学家在研究混沌吸引子等理论时需要引入的重要概念。为了定量地描述客观事物的“非规则”程度,1919年,数学家从测度的角度引入了维数概念,将维数从整数扩大到分数,从而突破了一般拓扑集维数为整数的界限。<BR>维数和测量有着密切的关系,下面我们举例说明一下分维的概念。<BR>当我们画一根直线,如果我们用 0维的点来量它,其结果为无穷大,因为直线中包含无穷多个点;如果我们用一块平面来量它,其结果是 0,因为直线中不包含平面。那么,用怎样的尺度来量它才会得到有限值哪?看来只有用与其同维数的小线段来量它才会得到有限值,而这里直线的维数为 1(大于0、小于2)。<BR>对于我们上面提到的Koch曲线,其整体是一条无限长的线折叠而成,显然,用小直线段量,其结果是无穷大,而用平面量,其结果是 0(此曲线中不包含平面),那么只有找一个与“寇赫岛”曲线维数相同的尺子量它才会得到有限值,而这个维数显然大于 1、小于 2,那么只能是小数了,所以存在分维。经过计算“寇赫岛”曲线的豪斯多夫维数(分维数)为d=log(4)/log(3)=1.26185950714...<BR><BR><BR>分形几何学的应用<BR><BR>分形几何学已在自然界与物理学中得到了应用。如在显微镜下观察落入溶液中的一粒花粉,会看见它不间断地作无规则运动(布朗运动),这是花粉在大量液体分子的无规则碰撞(每秒钟多达十亿亿次)下表现的平均行为。布朗粒子的轨迹,由各种尺寸的折线连成。只要有足够的分辨率,就可以发现原以为是直线段的部分,其实由大量更小尺度的折线连成。这是一种处处连续,但又处处无导数的曲线。这种布朗粒子轨迹的分维是 2,大大高于它的拓扑维数 1.<BR>在某些电化学反应中,电极附近成绩的固态物质,以不规则的树枝形状向外增长。受到污染的一些流水中,粘在藻类植物上的颗粒和胶状物,不断因新的沉积而生长,成为带有许多须须毛毛的枝条状,就可以用分维。<BR>自然界中更大的尺度上也存在分形对象。一枝粗干可以分出不规则的枝杈,每个枝杈继续分为细杈……,至少有十几次分支的层次,可以用分形几何学去测量。<BR>有人研究了某些云彩边界的几何性质,发现存在从 1公里到1000公里的无标度区。小于 1公里的云朵,更受地形概貌影响,大于1000公里时,地球曲率开始起作用。大小两端都受到一定特征尺度的限制,中间有三个数量级的无标度区,这已经足够了。分形存在于这中间区域。<BR>近几年在流体力学不稳定性、光学双稳定器件、化学震荡反映等试验中,都实际测得了混沌吸引子,并从实验数据中计算出它们的分维。学会从实验数据测算分维是最近的一大进展。分形几何学在物理学、生物学上的应用也正在成为有充实内容的研究领域 <BR></P> 用分形几何解读杨公风水术可使风水从经验,教条,不确定性的梏桎中解放出来,也可使风水术从牛顿构筑的机械唯物主义的包围圈中解放出来.进入非线性系统科学的殿堂. 天机大大博学,我一个小混混的帖引来大师的播道.很戟激! <P> </P>
<P>【轉帖】: 三维随机分形地形生成 - 生成随机分形地形</P>
<P> </P>
<P>
<TABLE cellSpacing=5 cellPadding=5 width=680 border=0>
<TBODY>
<TR>
<TD id=article_title align=middle height=50>三维随机分形地形生成 - 生成随机分形地形</TD></TR>
<TR>
<TD id=article_info align=middle bgColor=#f8f8f8 height=30>来自:<A href="http://www.86vr.com/" target=_blank><FONT color=#0066cc>86VR</FONT></A> | 时间:2004-10-9 | 点击:
<SCRIPT language=javascript src="/scripts/hits.asp?id=3839"></SCRIPT>
991</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width=680 border=0>
<TBODY>
<TR>
<TD align=middle background=/images/dot_h.gif height=1><IMG height=1 src="http://www.86vr.com/images/spacer.gif" width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width=680 border=0>
<TBODY>
<TR>
<TD id=article_content>目 录<BR> 1.1 介绍<BR> 1.2 自相似<BR> 1.3 一维中点变换<BR> 1.4 高度图<BR> 1.5 D-S算法<BR> 1.6 蓝天白云<BR> 1.7 其它算法
<P></P>
<P></P> 原 文:Generating Random Fractal Terrain Part I: Generating Random Fractal Terrain <BR> 译 者:品雪
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109103847rendered.jpg" border=0></IMG></CENTER>
<P></P>1.1、介绍
<P></P> 十年前,我参加1986年SIGGRAPH会议,Gavin S. P. Miller那篇题为“Definition and Rendering of Terrain Maps”的论文让我充满敬畏。该文描述了少数生成分形地形的算法,作者还介绍了一个他们认为更先进的新方法。开始我被这些算法能够生成难以置信的风景图所震惊。(尽管这些算法被作者认为“漏洞百出”)后来,读过论文,这些算法之简单将我完全打败了。我从此成为一个分形地形迷。
<P></P> 算法背后的数学可能相当复杂。然而,完全理解这些数学并不是掌握这些算法的必要条件。很好,否则我得在解释算法之前讲解所有的数,也许永远也讲不到算法。此外,关于分形数学的文字材料数以吨计,参见本文本的参考部分会有所帮助。
<P></P> 同样的原因,我不会深入到数学细节,也不包括对分形的广泛总览及它们可被用来做的每样东西。相反,我将描述分形地形生成背后的概念,并集中仔细讲解我个人最喜欢的“diamond-square”算法。我将演示如何使用这个算法静态拼嵌高度数据数组,这些数据可用于几何地形数据、地形纹理数据及云纹理映射。
<P></P> 分形有什么用呢?假定你已经知道,那正是你读本文的原因。随机地形图对飞行模拟或制作背景纹理图(如显示一带远山)十分有用。生成地形的算法也可用于生成部分云天的纹理图。
<P></P> 在继续之前,申明一下:我不是游戏程序员。如果你为找到一个快速绘制地形的算法而读此文,那你来错了地方。我只描述生成地形模型的过程。着色绘制是你自己的事。
<P></P>1.2、自相似
<P></P> 任何分形最关键的概念是自相似。当一个物体的一部分放大后看起来仍与整个物体一样,那这个物体就是自相似。考虑一下人体的循环系统。这是自然界中自相似的好例子。从最大的动脉和静脉分支直到最小的微血管,整个过程都显现相同的分支模式。如果你不知道正在使用显微镜,将无法分辨微血管和大动脉。现在再考虑一个简单的球。它是自相似的吗?不,大幅度放大后,它看起来不再象一个球,而象块平板。如果你不相信,看看户外。除非恰好你在太空轨道上看本文,否则将完全没法看出球是个球体。球体不是自相似的。它最用传统的欧几里德几何描述而不是分开。
<P></P> 地形属于自相似范畴。手掌上的碎岩锯齿状边缘与远处地平线边的山脊有相同的不规则形状。这使我们可以用分形来生成地形,不管显示时怎么放大,它看起来仍然象地面。
<P></P> 关自相似请注意:严格意义下,它意味着自分辨(self-identical),即,自身精确的缩略拷贝在逐渐放大缩小时可见。我并不知道自然界存在任何自分辨分形。但mandelbrot集是自分辨的。我不会进一步讨论Mandelbrot集。到参考里找进一步的信息。
<P></P>1.3、一维中点变换
<P></P> 后边要讲的Diamond-Square算法,在两维上使用一种中点变换算法。为帮助你了解个大概,我们先看一维情况。当山脉出现在远处地平线处时,一维中点变换是绘制山脊的好算法。看看它是怎么工作的:
<P></P> 以一条水平地平线段开始<BR> 重复足够多次<BR> {<BR> 对场景中的每条线段做<BR> {<BR> 找到线段的中点<BR> 在 Y 方向上随机移动中点一段距离<BR> 减小随机数取值范围<BR> }<BR> }
<P></P> 将随机数值域减速小多泊呢?那取决于你想要分形的陡峭程度。每次循环减少的越多,所得山脊线就越平滑。但如果减得太多,则会有明显的锯齿感。可以粗糙度存在一个常量里。后面会解释如何做。
<P></P> 来看个例子。我们以一条x从-1.0到1.0,y均为0的线段开始。开始,我们将随机值范围设为-1.0到1.0(可任意取)。这样我们在此范围里生成一个数字,并将中点移动这么多。这之后,我们就得到了:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109103927mpd1.gif" border=0></IMG></CENTER>
<P></P> 现在第二次经过外圈循环,我们有两段,长度均原来的一半。我们的随机值也减半,即-0.5到0.5。我们为两个中点都生成一个这个范围内的随机点,结果为:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109103943mpd2.gif" border=0></IMG></CENTER>
<P></P> 再次缩减范围,现在是-0.25到0.25。再以该范围内的数变换四个中点后,我们得到了:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109103958mpd3.gif" border=0></IMG></CENTER>
<P></P><BR>有两件事你可能已经注意到了。
<P></P> 首先,它是递归的。实际上,它可以用一个迭代过程相当自然的实现。对于这种情况,递归或迭代都成。对于表面生成代码,使用迭代实现比递归会有一些好处。所以为保持一致,线和面相应的代码都使用迭代实现。其次,它是个非常简单的算法,然而你能创建非常复杂的结果。这正是分形算法的美妙之处。一些简单的指令可以建立一个具有丰富细节的图像。
<P></P> 再跑一下题:少量简单的指令集能够生成复杂图像的事实已经成为一个新的研究领域称为分形图像压缩。其思想是保存建立图像的递归指令而不是保存图像本身。这对于自然界的分形图像是极有用的,因为指令相对图像占用的空间要少得多。“Chaos and Fractals, New Frontiers of Science3”有一章及一个附录涉及本主题,是一般学习分形的好读物。
<P></P> 回到现实。不用太费劲,你可以读取本函数的输出到一个绘制程序而得到类似如下的东西:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104027mpd5.gif" border=0></IMG></CENTER>
<P></P> 这可作为窗口景色使用。相关的好东西是它是约束的,所以你可以保留一个相当的小图像并用它拼出整个场景。如果你不介意在每个方向都看见相同的山,那就这么干。
<P></P> 好的,在进入 2D 分形表面之前,你得了解粗糙度常量。这个值决定每次循环随机数值域的减少量,也就是说,决 定分形结果的粗糙程度。例子代码使用一个0.0到1.0之间的浮点数并称之为H。因此2(-h)是1.0(对于小H)到 0.5(对大H)范围内的数。随机数范围在每次循环时乘上这个值。如果H设为1.0,则随机数范围将每次循环减半,从而得到一个非常平滑的分形。将H设为0.0,则范围根本不减小,结果有明显的锯齿感。
<P></P> 下边是三个山脊,每个用不同的H的值绘制:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104057mpdh.gif" border=0></IMG></CENTER>
<P></P>1.4、高度图
<P></P> 上边所说的中点变换算法可以用一个一维数组实现,数组成员是表明线段端点垂直位置的高度值。这数组是就是一个一维高度图。它将索引(x值)映射为高度值(y值)。
<P></P> 为模拟随机地形,我们想将该算法推广到3D空间。为做到这一点,我们需要一个两维高度值数组,它将索引(x,z)映射为高度(y)。数组只需保存高度值(y)。水平面值(x和z)可以在分析数组时即时生成。通过对每个高度指定一个颜色,可以将一幅高度图显示为一幅图像。如下,高点为白色,低处为黑色。
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104118heightmap.jpg" border=0></IMG></CENTER>
<P></P> 绘制高度图的方法对于生成云彩纹理图是很有用的,后边还会讨论。这种表达也可以用于播种一个高度图。现在我要讲讲如何拼嵌我们的二维高度图数组。
<P></P>1.5、Diamond-Square算法
<P></P> 正如本文开头提到过的,我先介绍Gavin S.P.Miller的论文中随机地形生成的概念。具有讽刺意义的是,Miller在论文中说diamond-square算法是有缺陷的,然后描述了一种完全不同的基于重量平均和控制点的算法。
<P></P> Miller对diamond-square算法的抱怨阻止他尝试迫使该算法建立一座山,也就是,带有一个山峰,人为增加网格中心点的高度。他让数组中所有的点都随机生成。如果Miller简单的只随机生成中心点,那么即使是他也会同意该算法是个经典的地形生成器。Diamond-Square算法可以通过给数组播种值来用一个山峰推出一坐山。比数组中心点更多的点得先播种以构造可接受的结果。他也抱怨一些固有皱折问题。但你得自己判断。算法最初是由Fourniew ,Fussell和Carpenter提出的。
<P></P> 思想如下:你从一个很大的空2D数组开始。多大呢?为简化起见,他应该是方的,维数应该是2的n次方加1(如 33X33、65X65、129X129等)。将四个角设为相同高度。如果你察看所得到东西,它是一个正方形。取个简单的例子,用一个5X5的数组。(本文后面还要参考这图,别忘记了)。图8中,图a的四个角种上了初始高度值,表示为黑点。
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104148dsa.gif" border=0></IMG></CENTER>
<P></P> 这是递归细分过程的起点,该过程分两步:
<P></P>diamond步
<P></P> 取四个点的正方形,在正方形中点生成一个随机值,中点为两对角线交点。中点值是平均四个角值再加上一个随机量计算得到的。这样就得到了一个棱锥。当网格上分布着多个正方形时有点象钻石。
<P></P><BR>square步
<P></P> 取每个四点形成的棱锥,在棱锥的中心生成一个随机值。平均角值再加上与diamond步相同的随机量,计算出每条边中点值。这又给你一个正方形。
<P></P> 这样,如果已经生成了一个种子正方形并经过单独一次细分过程将得到四个方形。第二次经过该过程得到16个方形,第三次得到64个方形。增长得很快。方形数目等于2(I + 2),其中I为递归经过细分过程的次数。参考前五幅插图,下图示意了使用我们的diamond-square算法两次经过数组时发生的情况。
<P></P> 对于第一遍经过diamond步时,我们依据四个角的值在数组中心生成一个值。我们平均四个角的值(如果种子值相等则完全没必要),并加上一个-1.0到1.0之间的随机值。在插图b中,新值显示成黑色,已经存在的点显示为灰色。对于square步,我们在相同的范围内生成随机值。这一步时有四个棱锥;他们在数组中心相交,这样我们计算四个diamond中心。diamonds的角被平均以找出新值的基数。插图C用黑色显示新值,现存值为灰色。
<P></P> 以上是第一遍,如果用线将这9个点边起来,就可以得到一个线框的表面,看起来就象:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104222dsap1.gif" border=0></IMG></CENTER>
<P></P> 现在进行第二遍。再次从diamond步开始。第二遍与第一遍有两点不同。首先,我们现在有四人四边形面不是一个,因此我们得计算四个方面的中心。其次,这是关键,生成随机数的范围已经被减小了。因为例子的缘故,让我们认为正在使用一个H=1.0的值。这将把我们的随机数取值范围将从(-1.0,1.0)到(-0.5,0.5)。在插图8的D中,我们这一步计算得到的四个正方形中心值显示为黑色。
<P></P> 最后,我们进行第二遍的square步。有12个棱锥中心,我们现在需要计算12个新值,如图8的e中黑色所示。现在数组中全部25个元素都已经生成。我们可以得到如下的线框曲面。
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104236dsap2.gif" border=0></IMG></CENTER>
<P></P> 如果分配更大的数组,我们可以进行更多遍,每一遍加入更多细节。例如,5遍之后表面看起来如下所示:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104255dsap5.gif" border=0></IMG></CENTER>
<P></P> 前面提到过,数组维数需要为2的整数次方加1。这是因为2D数组中的浮点数必须等于
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104710a.gif" border=0></IMG></CENTER>。8次迭代将需要一个257X257的浮点数组,对于标准的32位IEEE浮点数来说超过256K内存。
<P></P> 好了,它就是这么大。用char取代floats会有所帮助。例子程序使用floats,但你要真的关注内存使用那么使用char。修改例子使用之使用-128到128的范围是很容易的,但别忘了将你生成的值限定在-128到128范围里,子序列通过时会生成该范围以外的值,这会导致溢出。这在使用较小的H时尤其可能。
<P></P> 例子程序演示了处理尺寸的另外一种方法。用一个大数组依据diamond-square算法进行定位及拼嵌。然后从平行投影体顶视图进行绘制。这个图像被读回来并用作已经拼嵌成较小范围的第二个数组上的纹理图。然而,例子程序并没有这样做,一但图像从帧缓冲读回,第一个数组就被释放了。这有个纹理图的例子:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104326teximage.jpg" border=0></IMG></CENTER>
<P></P> 该图经过人工着色,山峰为白色,山谷为绿色,两者之间为灰色。尽管利用例子程序源码试试自己的配色方案。早先还到过用迭代实现这个例程比递归好。原因是,一个递归实现可能翻采用如下形式:
<P></P> 执行diamond步<BR> 执行square步<BR> 减小随机数范围<BR> 调用自己四次
<P></P> 这是个很简洁的实现,而且毫无疑问它能工作。但它要求用不充足的数据生成某些点。为什么呢?经过第一遍之后,你将再次调用以执行square步,但这时并没有一个棱锥四个角的全部数据。与之相反,我用个迭代实现,伪码如下:
<P></P> 当square边长度大于0时<BR> {<BR> 遍历数组,对每个正方形表达执行diamond步<BR> 遍历数组,对每个棱锥表达执行diamond步<BR> 减小随机数范围<BR> }
<P></P> 这样就消除了递归实现中出现的棱锥角丢失问题。但在生成数组边界的点时还是会碰到这个问题。下图中,数组中构成棱锥角的位置用亮灰色表示。它们应该被平均以找出新的基本值,即图中黑色的点。
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104530dsaedge.gif" border=0></IMG></CENTER>
<P></P> 注意用黑色标记的两个值。它们实际上是相同的值。每次你在square步计算一个边界上的值时,记得同时把它保存在数组对面边上。这意味着前面插图e中,我们实际上不必计算12个单独的值,因为其中的四个在数组相对的两条边上重复。实际上只有8个值需要计算。感兴趣的读都可以练习一下:取出源代码并使用它在边界的值不重复时也能工作。这对算法正常工作是没有必要的,按我写的方式去做就成。
<P></P> 如果你还没运行过例子程序,现在或许是时候打开看看了。它从两次迭代生成的曲面开始。曲面是用线框绘制的,只是简单的将数组中的值用线段边接起来。数组中的值被当作Y值,而X和Z坐标是在数组分析时即时生成的。通过将一个方形分成两个三角形可以轻易的使用三角形绘制出这个曲面。三角形通常都是很好的图元,因为它总是凸性的平面。
<P></P> 用“View Opeions”对话框调节RAndom seed值。这会导致生成不同的曲面。调高“iterations”值给曲面增加细节。代码限制这个值到10,这对于我32MB内存的Pentium Pro系统有点多,看起来是黑的(或许五年以后,人们会在新的处理器和更高分辨率的显示器上运行这个程序,会对我为什么将它限制到10十分奇怪的……)。第一个H值控制表面粗糙度,默认值为0.7。试着设得更高或更低看看结果如何。是的这个算法偶尔会产生局部尖刺或皱折。但我偏爱尖或皱折不明显依赖于观察角度或飞过它的速度这种超自然的效果。
<P></P>1.6、蓝天白云
<P></P> 现在我们知道如何生成表面。我们可以生成并着色大量的三角形,也可以生成一个高分辨率的纹理图并将它应用到低分辩率的表面。不管怎样,效果相当好。那么,我们怎么生成头上的天空呢?它比你想象得要简单。
<P></P> diamond-square算法拼嵌完成的数组非常适于表示云天的纹理图。与把数组看作一套高度图上的y值相反,把它看成云的不透明度数据。最小数组值代表最蓝。天空中最晰的部分,最大的值代表最白,天空中云最重的部分。分析数组并生成如下的纹理图是相当琐碎的:
<P></P>
<CENTER><IMG src="http://www.86vr.com/files/2004-10/2004109104555cloudmap.gif" border=0></IMG></CENTER>
<P></P> 这与前面的高度图很象,但我已经限定了高、低值以建立清晰有云的天空。也可以用例子程序生成一幅类似的图像。设置“Select rendering type”下拉菜单为“2D mesh/clouds”。(默认时看起来有像素感,试试把“Cloud iterations”值设为8以上修正之)。试试给这H赋不同的值(就是前面刚说过的“Cloud iterations”值),以取得不同的云的效果。
<P></P> 如果回到本文开头,第一幅图结合了许多我在这做的讨论。天空是用一个如上的纹理图作的,沿一个八边金字塔重复排放多次曲面几何体用一个高分辩率纹理图绘制。这个纹理图是通过从一个平行顶视图着色一个高度拼嵌有光照曲面而生成的。然后,这个图被读出用作纹理图。跟随本文的例子程序被用于生成本文中出现的几乎所有图像。
<P></P>1.7、其它算法
<P></P> 可能会想对曲面生成有比样本代码更多的控制。例如,可能想用自己的值给数组的前几遍初始化种子值,这样,山、谷……可以基本位于你设计的位置。然后用diamon-square算法填写其它细节。
<P></P> 修改代码,使之在赋值时略过已有值的数组成员是易于完成的。初始化数组为,例如,-10.0,给前几遍指定自己的值作为种子,再增强分形生成代码只给当前值为-10.0的赋值。简几遍将不会生成任何值,因为你的种子值已经在那儿了。后续几遍将在种子值在基础上生成新值。
<P></P> 如何取得种子值呢?如果想要的形状遵循某个已知的数学公式,如正弦曲线,就用这个函数生成值。否则,你得找出创造性的方法完成。我见过的一种算法是用灰度值绘制自己的高度图。将灰度映射成高度值并存入数组。再用diamond-square算法增加更多细节。
<P></P> 除了diamond-square算法,还有许多拼嵌表面的方法。用连续随机增加,2D数组的一个随机部分增高一个很少的量。反复多次,对所选中的数组区域加上一个很小的随机值。这可以生成相当不错的结果,但不是线性计算的。如果计算时间无所谓,那么建议试试这个算法。一另一个相似的方法,制造一个穿过数组的“折断”,并增加其中的一边,就象地震出现一样。再重复多次。这也不是一个线性算法,要多遍才能取得可以接受的结果。参见参考文献以了解更多其它途径。</TD></TR></TBODY></TABLE></P> 「碎形幾何學」(fractal)是一門新數學,它能夠<span style="font-weight: bold;">處理不規則、無定形且複雜的圖形</span>,諸如樹木的分枝、海岸線、動物的犄角、河流分叉、山勢、螺貝圖、雲的形狀、樹葉、閃電等形狀,用我們所學的歐幾里得幾何學,無法說明這些特殊的形狀,但是這些外觀上極不規則的自然界複雜型態,都能夠以碎形幾何學來予以解釋。碎形幾何學,結合電腦正是解決這方面問題的利器。<br><br>1975年,曼德布洛特(Benoit B. Mandelbrot)發表新理論「碎形幾何學」(fractal geometry),曼德布洛特是一位相當用心的學者,試圖將非定形加以定量化。在本世紀初期以前,已經有佩亞諾(Giuseppe Peano,1858~1932,義大利數學家及語言學家)、H·科赫、康特(Georg Ferdnand Ludwig Philipp Cantor,1848~1918,德國數學家)等學者專門研究歐氏幾何學無法說明的病態圖形(指無從著手研究的圖形)。曼德布洛特也注意到此種圖形,於是彙總先人們的研究成果後,他提出了「碎形」新理論。<br><br>1977年,他在《碎形幾何學》一書中發表碎形理論,對「碎形的概念」下定義,開拓出研究非定形幾何學的新領域。「碎形」(fractal)一詞是曼德布洛特所創造的,是根據拉丁語「fractus」〈殘碎物之意〉而來,也就是指<span style="font-weight: bold;">斷片等不規則的圖形</span>。<br><br><span style="font-weight: bold;">碎形具有自相似性,「自相似性」是指某圖形的任意部分經放大或縮小後,仍然可以展現出原來的型態</span>,也就是指<span style="font-weight: bold;">整體圖形和部分圖形都具有相似型態。</span>所以將碎形圖形無限放大,將會出現與原來圖形極相似的形像。自然界有多種形態都擁有碎形性,裁切密林或山水風景相片的某部分,將其貼在另一張風景相片上,則往往不會損傷我們對此張相片的印象,這就是具相似性的形態和圖形所擁有的特點。 在各種碎形圖形中,「曼德布洛特集合」(Mandelbrot set)是最有名的一個圖案,現在我們已經能運用電腦繪圖技術,以反覆代入方程式的方式計算結果來得到此圖形。<br> <br> <span style="font-weight: bold;">谁创立了分形几何学?</span><br><br> 1973年,<span style="font-weight: bold;">曼德勃罗</span>(B.B.Mandelbrot)在法兰西学院讲课时,首次提出了分维和分形几何的设想。分形(Fractal)一词,是曼德勃罗创造出来的,其原意具有不规则、支离破碎等意义,分形几何学是一门<span style="font-weight: bold;">以非规则几何形态为研究对象的几何学</span>。由于不规则现象在自然界是普遍存在的,因此分形几何又称为描述大自然的几何学。分形几何建立以后,很快就引起了许多学科的关注,这是由于它不仅在理论上,而且在实用上都具有重要价值。<br><br>分形几何与传统几何相比有什么特点:<br><br> ⑴从整体上看,分形几何图形是处处不规则的。例如,海岸线和山川形状,从远距离观察,其形状是极不规则的。<br> ⑵在不同尺度上,图形的规则性又是相同的。上述的海岸线和山川形状,从近距离观察,其局部形状又和整体形态相似,它们从整体到局部,都是自相似的。当然,也有一些分形几何图形,它们并不完全是自相似的。其中一些是用来描述一般随即现象的,还有一些是用来描述混沌和非线性系统的。<br><br>什么是分维?<br><br> 在欧氏空间中,人们习惯把空间看成三维的,平面或球面看成二维,而把直线或曲线看成一维。也可以梢加推广,认为点是零维的,还可以引入高维空间,但通常人们习惯于整数的维数。分形理论把维数视为分数,这类维数是物理学家在研究混沌吸引子等理论时需要引入的重要概念。为了定量地描述客观事物的“非规则”程度, 1919年,<span style="font-weight: bold;">数学家从测度的角度引入了维数概念,将维数从整数扩大到分数</span>,从而突破了一般拓扑集维数为整数的界限。<br> 分维的概念我们可以从两方面建立起来:一方面,我们首先画一个线段、正方形和立方体,它们的边长都是1。将它们的边长二等分,此时,原图的线度缩小为原来的1/2,而将原图等分为若干个相似的图形。其线段、正方形、立方体分别被等分为2^1、2^2和2^3个相似的子图形,其中的指数1、2、3,正好等于与图形相应的经验维数。一般说来,如果某图形是由把原图缩小为1/a的相似的b个图形所组成,有:<br><br> a^D=b, D=logb/loga<br><br>的关系成立,则指数D称为相似性维数,D可以是整数,也可以是分数。另一方面,当我们画一根直线,如果我们用0维的点来量它,其结果为无穷大,因为直线中包含无穷多个点;如果我们用一块平面来量它,其结果是0,因为直线中不包含平面。那么,用怎样的尺度来量它才会得到有限值哪?看来只有用与其同维数的小线段来量它才会得到有限值,而这里直线的维数为1(大于0、小于2)。与此类似,如果我们画一个Koch曲线,其整体是一条无限长的线折叠而成,显然,用小直线段量,其结果是无穷大,而用平面量,其结果是0(此曲线中不包含平面),那么只有找一个与Koch曲线维数相同的尺子量它才会得到有限值,而这个维数显然大于1、小于2,那么只能是小数(即分数)了,所以存在分维。其实,Koch曲线的维数是1.2618……。<br><br>Fractal(分形)一词的由来<br><br> 据曼德勃罗教授自己说,fractal一词是1975年夏天的一个寂静夜晚,他在冥思苦想之余偶翻他儿子的拉丁文字典时,突然想到的。此词源于拉丁文形容词fractus,对应的拉丁文动词是frangere(“破碎”、“产生无规碎片”)。此外与英文的fraction(“碎片”、“分数”)及 fragment(“碎片”)具有相同的词根。在70年代中期以前,曼德勃罗一直使用英文fractional一词来表示他的分形思想。因此,取拉丁词之头,撷英文之尾的fractal,本意是不规则的、破碎的、分数的。曼德勃罗是想用此词来描述自然界中传统欧几里德几何学所不能描述的一大类复杂无规的几何对象。例如,弯弯曲曲的海岸线、起伏不平的山脉,粗糙不堪的断面,变幻无常的浮云,九曲回肠的河流,纵横交错的血管,令人眼花僚乱的满天繁星等。它们的特点是,极不规则或极不光滑。直观而粗略地说,这些对象都是分形。<br><br>分形的定义<br><br> 曼德勃罗曾经为分形下过两个定义:<br> (1)满足下式条件<br> Dim(A)>dim(A)<br>的集合A,称为分形集。其中,Dim(A)为集合A的Hausdoff维数(或分维数),dim(A)为其拓扑维数。一般说来,Dim(A)不是整数,而是分数。<br> (2)部分与整体以某种形式相似的形,称为分形。<br> 然而,经过理论和应用的检验,人们发现这两个定义很难包括分形如此丰富的内容。实际上,对于什么是分形,到目前为止还不能给出一个确切的定义,正如生物学中对“生命”也没有严格明确的定义一样,人们通常是列出生命体的一系列特性来加以说明。对分形的定义也可同样的处理。<br> (i)分形集都具有任意小尺度下的比例细节,或者说它具有精细的结构。<br> (ii)分形集不能用传统的几何语言来描述,它既不是满足某些条件的点的轨迹,也不是某些简单方程的解集。<br> (iii)分形集具有某种自相似形式,可能是近似的自相似或者统计的自相似。<br> (iv)一般,分形集的“分形维数”,严格大于它相应的拓扑维数。<br> (v)在大多数令人感兴趣的情形下,分形集由非常简单的方法定义,可能以变换的迭代产生。<br><br>为什么要研究分形?<br><br> 首先,分形形态是自然界普遍存在的,研究分形,是探讨自然界的复杂事物的客观规律及其内在联系的需要,分形提供了新的概念和方法。<br> 其次,分形具有广阔的应用前景,在分形的发展过程中,许多传统的科学难题,由于分形的引入而取得显著进展。<br> 分形作为一种新的概念和方法,正在许多领域开展应用探索。80年代初国外开始的“分形热”经久不息。美国著名物理学家惠勒说过:今后谁不熟悉分形,谁就不能被称为科学上的文化人。<br>[本文由分形频道整理和录制,转载请保留]<a href="http://www.fractal.cn/east_new/fxrm/index.htm">http://www.fractal.cn/east_new/fxrm/index.htm</a><br> 非常好,恰好到处的基础知识介绍,避免了繁杂枯燥的数学推导,真仍大师之作!
[ 本帖最后由 ah298014 于 2008-7-4 14:21 编辑 ] <P><FONT style="BACKGROUND-COLOR: #eff2ff">科学沦叙、有创意:</FONT></P> 本帖最后由 云乔居士 于 2011-5-31 00:25 编辑
坤壬乙诀是否是分形几何在风水上的应用? 坤壬乙诀是否是分形几何在风水上的应用?
云乔居士 发表于 2011-5-31 00:23 http://www.fengshui-168.com/images/common/back.gif
居士啊,以科学的理论方法作为工具来研究玄学,恐怕难度够大吧?习惯上的科学针对的是物质,而玄学针对的是生命,两者好像属于不同性质的主题? 混沌与分形几何是风水研究的利器.因为风水理论是根于非线性体系.风水要脱离江湖术科之行列必须运用非线性理论来解决风水领域的问题. 习惯上的科学针对的是物质,而玄学针对的是生命,两者好像属于不同性质的主题?
wbjzfy2009 发表于 2011-5-31 16:00 http://www.fengshui-168.com/images/common/back.gif
科学也有生物学和医学吧! 渴望陈易麟先生再次在天机布道。盼眼欲穿!风水的真谛在哪里?
页:
[1]