Step 7:Processing分形之二——Peter de Jong Attractor

时间:2022-09-08 17:34:32

人真正变强大,不是因为守护着自尊心,而是抛开自尊心的时候。
——《请回答1988》

Strange Attractor是混沌运动的主要特征之一,由法国物理学家小D和小F在1970年左右引进。Now here comes a question : 何为混沌运动?度娘解释道,混沌(chaos)是指确定性动力学系统因对初值敏感而表现出的不可预测的、类似随机性的运动。元芳,你怎么看?简单点,你又不是个演员,不就是蝴蝶效应嘛。

We need to have a wealth of imagination and association. 谁知道你现在忍不住的一个喷嚏,它是否has changed your life?

烧脑热线:埃里克·布雷斯、J·麦凯伊·格鲁伯执导《蝴蝶效应》:

Step 7:Processing分形之二——Peter de Jong Attractor

6.1 Attractor

所谓吸引子(Attractor),是动力系统里的一个状态,系统演化会趋向那个方向靠拢。所有运动系统,不管是混沌的还是非混沌的,都是以吸引子为基础。

Step 7:Processing分形之二——Peter de Jong Attractor

奇异吸引子具有两个主要特征:

① 奇异吸引子的运动对初值表现为极强的敏感依赖性,在初值上微小的差异,就会导致运动轨迹的截然不同;

② 奇异吸引子往往具有非整数维,如2.06维,需要计算才能确定。

6.2 Amazing Grace

鉴于其属性,奇异吸引子本质上可是相当艺术性的。 吕埃勒这样写到:“这些系统的曲线,有时像烟花或者星系图,有时像蔬菜的分芽繁殖过程。”

例如,Lorenz Attractor 拥有自对称之美:

Step 7:Processing分形之二——Peter de Jong Attractor

Peter de Jong Attractor在二维或三维空间可视化——

可视化:

Step 7:Processing分形之二——Peter de Jong Attractor

立体化:

Step 7:Processing分形之二——Peter de Jong Attractor

塑料质感:

Step 7:Processing分形之二——Peter de Jong Attractor

6.3 Processing与Peter de Jong Attractor

Peter de Jong Attractor方程式如下:

  //Processing中,其数学公式的表达:
float newX = sin(a * oldY) - cos(b * oldX);
float newY = sin(c * oldX) - cos(d * oldY);

旧坐标的迭代计算产生一组新的坐标,可以绘制为二维图形。 而改变常数a,b,c和d的值能够产生不同的图案。

float x = 0, y = 0.5
float a = -2, b = -2, c = -1.2, d = 2

Step 7:Processing分形之二——Peter de Jong Attractor

float a = 1.641, b = 1.902, c = 0.316, d = 1.525;

Step 7:Processing分形之二——Peter de Jong Attractor

float a = 0.970, b = -1.899, c = 1.381, d = -1.506;

Step 7:Processing分形之二——Peter de Jong Attractor

float a = 1.4, b = -2.3, c = 2.4, d = -2.1;

Step 7:Processing分形之二——Peter de Jong Attractor

float a = 2.01, b = -2.53, c = 1.61, d = -0.33;

Step 7:Processing分形之二——Peter de Jong Attractor

float a = -0.827, b = -1.637, c = 1.659, d = -0.943;

Step 7:Processing分形之二——Peter de Jong Attractor

float a = -2.24, b = 0.43, c = -0.65, d = -2.43;

Step 7:Processing分形之二——Peter de Jong Attractor

float a = -0.709, b = 1.638, c = 0.452, d = 1.740;

Step 7:Processing分形之二——Peter de Jong Attractor

实现示例代码:

/**
* Peter de Jong Attractors
* @微信公众号:维度模态
* @author:Hewes
* @date 2017/08/20
*/


size(800, 800);
background(255);
stroke(0);
translate(width/2, height/2); //平移至中心

float oldX = 0, oldY = 0.5;
float a = -2, b = -2, c = -1.2, d = 2, mag = 150; //参数mag代表放大倍数

for (int i = 0; i < 200000; i++) {
//迭代公式:
//xn+1 = sin(a yn) - cos(b xn)
//yn+1 = sin(c xn) - cos(d yn)
float newX= sin(a * oldY) - cos(b * oldX);
float newY= sin(c * oldX) - cos(d * oldY);

//放大+画点
point(newX * mag, newY * mag);

//赋新值
oldX=newX;
oldY=newY;
}

Maybe you want to do something like this:

Step 7:Processing分形之二——Peter de Jong Attractor

但由于这里涉及到了图像渲染知识,其另有一番奥妙。欲知后事如何,请听下回分解。

6.4 挡不住的 Interaction

加一点鼠标操作,如何?其核心代码:

//鼠标按下后改变参数的值
void mousePressed() {
background(255);
x = random(-0.2, 0.2);
y = random(-0.2, 0.2);
a = random(-2.5, 2.5);
b = random(-2.5, 2.5);
c = random(-2.5, 2.5);
d = random(-2.5, 2.5);
}

更高级一些呢

Step 7:Processing分形之二——Peter de Jong Attractor

你的脑洞大,你来讲……

Step 7:Processing分形之二——Peter de Jong Attractor