Scratch画分形图系列45: 混沌游戏之在两几何体间跳舞
巴恩斯利在《超分形》中介绍了一个有趣的混沌游戏的例子。
(一)先看混沌游戏生成谢尔宾斯基三角。
以下过程,我们称之为“混沌游戏”,由此再现迭代函数系统(IFS)及其吸引子的概念。
在一张纸上标记四个点。将其中三个标记为A、 B 、 C ,并将剩余的点标记为X0。
谢尔宾斯基三角的IFS迭代示意图
将六面骰子的两个面标记为A、另外两个面记为B和其余两个面记为C,或者设计您自己的方法来生成符号A、 B和C的随机序列(本篇仍然用1~3之间随机数实现)。
掷骰子,随机选择符号A、 B或C。在纸上,标记X0和所选符号标记的点(A、B、C之一)之间的中点。将此中点称为X1。例如,如果掷骰子的结果是B ,那么X1就是X0和B之间的中点。
再次掷骰子。绘制X1和其标签显示在骰子上的点之间的中点。将这个新点称为X2。以此类推,一次又一次地滚动骰子,...,每次都在纸上绘制一个新的中点。结果在纸上看起来很可能类似于图。它是 Sierpinski 三角形的近似图,带有一些额外的“离群”点。
如果点A、B和C是固定的,那么每次运行实验时,您都可能获得不完全同的 Sierpinski 三角形图片,但只是略有不同。事实上,如果您在 计算并描出一千万个点并丢弃前十六个点,那么每次运行实验时生成的图片可能看起来都一样。
Sierpinski 三角形图片
Scratch编程实现:
(1)在上面的示例中,IFS 由三个简单的规则组成,每个规则都将当前点移动到一个新位置。
规则 1:移动到当前位置和A之间的中间点。
规则 2:移动到当前位置和B之间的中点。
规则 3:移动到当前位置和C之间的中点。
为了编程方便,我们设定三个角色A,B,C,分别位于三角形的三个顶点位置。例如A(0,50),B(100,-50),C(200,-50),你也可以自己选择感兴趣的位置。根据三个规则,用侦测指令,获取角色A,B,C的x坐标和y坐标,运用解析几何的中点公式,定义三个自定义积木:
使用侦测指令获得顶点坐标
用角色坐标定义IFS迭代关系
(2)混沌游戏控制程序:
(3)描点主程序:
(4)将A、B、C角色的位置变成A(-200,165),B(-165,-150),C(200,100)的谢尔宾斯基三角。
改变三角形顶点坐标位置
另一个谢尔宾斯基三角
可见,无论起点X0的选择如何,也无论随机选择的特定顺序如何,点X0、 X1、 X2...的序列似乎都被拉向或“吸引”到谢尔宾斯基三角形;在足够多的随机迭代之后,连续的点出现,在观察分辨率下,正好位于谢尔宾斯基三角形上,并永远在它周围跳舞,这就是“吸引子”现象。
(二)在两个经典欧几里得图形——一个正方形和一个三角形上跳舞的混沌游戏。
在上面混沌游戏基础上,做一个简单变化。在一张纸上标记四个点。
将其中三个标记为A(0,50),B(100,-50)和C(200,-50),并将剩余的点标记为X0。我们在上面谢尔宾斯基三角的三个规则中添加了两个规则:
规则4:移动2(B - C)。
规则5:绕点(A 5B-4C)/2旋转180 °
这一次,当你玩游戏的时候,记住最后一次掷出的骰子是什么,记为P旧,从掷一次骰子开始,给你一个起始值。现在,每次掷骰子,新混沌游戏总控制规则是:
(1)如果上次掷出A或B ,而这次掷出A ,则应用规则1。如果掷出B ,则应用规则 2 ,如果掷出C ,则应用规则4。
(2)如果上次掷C,这次它产生A或B ,然后应用规则3 ,但如果它产生C ,则应用规则5。
主控程序:
描点主程序:
在这个新游戏中,如果你放弃最初的几个点,那么你会得到一个与谢尔宾斯基三角一样惊人的结果,您将同时获得两个经典几何对象,一个实心平行四边形和一个三角形。遵循上述规则,你将看到,当前点将在正方形和三角形上不断跳动,有时从一个移动到另一个,有时又回到第一个......。是不是很新奇?
扩展:我们这次使用的是与以往定义IFS迭代函数不同方法,你是否可以像我们前面介绍的方法,定义仿射变换(中点、平移、对称),实现在两个几何图形间跳舞的混沌游戏?
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved