Scratch画分形图系列46: 另法形成在两几何面间跳舞
上一篇介绍了巴恩斯利在《超分形》中的一个有趣的混沌游戏的例子,我们是用三个角色ABC来确定三角形ABC的位置,并用侦测模块获取顶点的坐标值,针对每一条规则,直接用运动指令描点。
本篇沿用前面IFS画分形的通用方法,建立一个通用的仿射变换函数(子积木),用6个变量Ax,Ay,Bx,By,Cx,Cy的值为坐标,确定三角形ABC的位置。并分别用这6个值生成各个规则的参数值。
(一)首先简要介绍6条规则:
在一张纸上标记四个点。将其中三个标记为A、 B 、 C ,并将剩余的点标记为X0。
将六面骰子的两个面标记为A、另外两个面记为B和其余两个面记为C,或者设计您自己的方法来生成符号A、 B和C的随机序列(本篇仍然用1~3之间随机数实现)。
前三条规则:
掷骰子,随机选择符号A、B或C。在纸上,标记X0和所选符号标记的点(A、B、C之一)之间的中点。将此中点称为X1。例如,如果掷骰子的结果是B ,那么X1就是X0和B之间的中点。再次掷骰子。绘制X1和其标签显示在骰子上的点之间的中点。将这个新点称为X2。以此类推,一次又一次地滚动骰子,...,每次都在纸上绘制一个新的中点。即:
规则 1:移动到当前位置和A之间的中间点。
规则 2:移动到当前位置和B之间的中点。
规则 3:移动到当前位置和C之间的中点。
另外两条规则描述:
规则4:移动2(B-C)。
规则5:绕点(A 5B-4C)/2 旋转180 °
在坐标平面上,A(Ax, Ay),B(Bx, By),C(Cx, Cy),利用平面解析几何的中点公式、平移公式和对称点公式,设当前点为
可见这5个规则都是满足仿射变换公式的:
因此可以用一个迭代函数实现,
在两几何面间跳舞的混沌游戏的IFS数据:
规则 | a | b | c | d | e | f |
1 | 0.5 | 0 | 0 | 0.5 | Ax/2 | Ay/2 |
2 | 0.5 | 0 | 0 | 0.5 | Bx/2 | By/2 |
3 | 0.5 | 0 | 0 | 0.5 | Cx/2 | Cy/2 |
4 | 1 | 0 | 0 | 1 | 2(Bx-Cx) | 2(By-Cy) |
5 | -1 | 0 | 0 | -1 | Ax 5Bx-4Cx | Ay 5By-4Cy |
游戏总规则:
当你玩游戏的时候,记住最后一次掷出的骰子是什么,记为P旧,从掷一次骰子开始,给你一个起始值。现在,每次掷骰子,混沌游戏总控制规则是:
(1)如果上次掷出A或B ,而这次掷出A ,则应用规则1;如果掷出B ,则应用规则 2 ;如果掷出C ,则应用规则4。
(2)如果上次掷的是C,这次它产生A或B ,然后应用规则3 ,但如果它产生C ,则应用规则5。
在两几何面间跳舞的混沌游戏主控程序:
描点主程序:
在这个混沌游戏中,如果你放弃最初的几个点,那么您将同时获得两个经典几何对象,一个实心平行四边形和一个三角形。遵循上述规则,你将看到,当前点将在四边形和三角形上不断跳动,有时从一个移动到另一个,有时又回到第一个......。
一个四边形和一个三角形
拓展1:写出画一般形状谢尔宾斯基三角的IFS程序。
拓展2:变换一组三角形ABC的顶点坐标值并画出三角形ABC,运行程序看看两个几何图形形状各是什么?
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved