上一条文中,磋商了一个与混沌理论有关的编程仿照大略的DLA模型项目。文末的拓展部分,说道:由于随机行走,每次你得到的图案都会不一样,相称于把自然的过程搬回家。粒子的开释是随机的,粒子的运动也是随机的,区域的边界是固定的(方形、圆形或其他形状),种子粒子是固定的(中央的一个点、下方的一根线或其他),凝聚的规则也是固定的(碰到凝聚体则凝聚,碰到边界则消逝)。“随机”加上“规则”,DLA模型可以这样仿照自然界的许多成长过程,或许,这便是自然界许多事物的成长规律!
提出后续将仿照其它边界形状和中央位置的DLA模型,本文就来连续这个话题。后一种模型更像珊瑚礁沉积过程。
珊瑚图
【边界形状为圆的DLA模型】与上文仿照一种大略单纯的DLA模型不同的是,边界由一个矩形框变为一个半径为175的较大的圆。假定在圆里划分出比如大小是15×15的格子,而中心的格点在圆心,也即是原点O=(0,0)处,在此处设置一个粒子。然后,在圆周上随机取一点,这个点可以算作是从圆形边框上落下来的灰尘。
灰尘往前走一步(格)后,第二步可以沿四个方向随机选择,这样相称于随机行走。当这粒灰尘走到中心点O粒子周围的任意四个格点后,也可以量化为与粒子间隔小于格子长度15,就停下来,我们说这粒灰尘跟O点粘在了一起。如果走到了其他边框及以外,那么就可以算作是灰尘飞走了,接着重复从边框上落下第二粒灰尘。如果第一粒粘上了,那么第二粒须要粘在第一粒的四周。以此重复落下3600粒灰尘,须要粘在前面粘住的各粒中的某一个的四周或者飞出圆外,到末了你就可以看到类似分形的图案,这实在便是仿照自然的一个过程。
【算法剖析】在一个圆形的中央放入一个静止的种子粒子,在区域边界的某个位置上随机开释粒子,也便是说,种子在中央点,而区域是圆形的。
首先,在区域的中央(坐标(0, 0))放置一个静止的种子粒子,此时初始的凝聚体只包含种子粒子这一个粒子;接着,在圆周的某个位置上随机开释一个新的粒子,新的粒子随机行走,碰到区域边界或以外则消逝,靠近已形成的凝聚体(最初只有一个种子粒子)则与凝聚体凝聚,此时形成的新的凝聚体包含了两个粒子。重复这样的过程,直至得到足够大的凝聚体。
假定开释的粒子总数为3600 个,可以想见实验完成后,组成凝聚体的点会小于3600 个,一样平常来说,大多数粒子都在运动过程中碰到区域边界消逝了。以是,须要一定的韶光才能形成一个规模可不雅观的凝聚体。为了更快地显现图形,程序中假设移动的粒子和已形成的凝聚体所包含的某个粒子之间的间隔小于9,就视为该移动粒子已靠近凝聚体(位于某凝聚体的四周),也便是可以与这个已形成的凝聚体相凝聚了,并形成一个更大的凝聚体。
【编程实现】
1.画圆圈的子程序:
2.实时添加新的凝聚点坐标值进列表并描出该点的子程序与前面相同:
3.建立随机天生圆周上的点的坐标值,比前面四个边框上的点的坐标值并放入相应的列表“随机点X”和“随机点Y”的子程序更大略。不须要中转列表,用圆的参数方程,直接由随机角度和半径、步长直接天生移动一步往后的坐标值放入随机点凑集的坐标凑集即可。
4.为了判断行走的粒子是否靠近凝聚点,须要建立一个打算两点间间隔的子程序:
5.随机游走的子程序:
6.粒子行走并实时检测是否越界或靠近凝聚体,并计时标记或消逝的子程序与前面模型差不多,只是越界的条件改为间隔圆心超过175:
7.仿照DLA模型的主程序:
8.运行后随机结果之一:
【种子是线段的DLA模型】再来磋商另一个种子的分布是一条线段,不妨设为矩形方框的下底线,而随机的粒子是分布在一条与种子线平行的线段即矩形上面那条边的模型。这有点儿像珊瑚礁集聚的过程,我们设想那些粒子便是珊瑚虫分泌的石灰质物质,下底线是海底,上边便是珊瑚虫活动的平面。
【算法剖析】大体与上一篇文章中的模型类似,只是随机粒子的分布只有矩形方框的上方那一条线段了,其余凝聚条件增加了一条,即间隔底线小于给定的步长(方格边长)。以是只是对随机粒子坐标值列表天生和凝聚或逃逸(飞走)的检测剖断子程序做一些改动即可。
1.主程序、画方形和随机粒子坐标值列表天生子程序:
2.打算间隔和添加并显示新凝聚点的子程序:
3.检测判断程序和随机游走子程序:
4程序运行完成后所得到的随机图形之一,看看成长构造是否形似珊瑚和植物?
【把稳】在这样的仿照DLA模型的案例中,随机数模块起到了主要浸染,请留神体会。还有便是在检测是否集聚时,我们是让列表里面末了面的点最先检测,由于末了的碰到的机率更大,这样会大大提高检测效率。