PopCorn, Mira, Hopalong and...
Absolutly personal and unpublished Morrone transformation of famous 2D attractors in 3D/4D
PopCorn4D
default values
Below there is an absolutly personal edition of fomous 2D attractor "transformed" in 3D and/or 4D dimensions.
The result is really interesting...
3D attractors are point clouds generate from sequences of numbers pn{xn,yn,zn} ⇒ pn ∈ R3, n ∈ N,
where n0→∞ denotes the step of the iteration process starting from a initial p0{x0,y0,z0} point.
In the cloud each next point is function of the previous one:
\[ \eqalign { x_{i+1} = \xi(x_i, y_i, z_i) & \\ y_{i+1} = \phi(x_i, y_i, z_i) & \\ z_{i+1} = \psi(x_i, y_i, z_i) & } \qquad \Bigg\{ \eqalign { & x, y, z \in R \\ & [0, i, n_{\rightarrow\infty}[ \text{ } \Rightarrow i,n \in N \\ } \]
In this section we will see also 4D attractors:
\[ \eqalign { x_{i+1} & = \xi(x_i, y_i, z_i, w_i) & \\ y_{i+1} & = \phi(x_i, y_i, z_i, w_i) & \\ z_{i+1} & = \psi(x_i, y_i, z_i, w_i) & \\ w_{i+1} & = \zeta(x_i, y_i, z_i, w_i) & } \qquad \Bigg\{ \eqalign { & x, y, z, w \in R \\ & [0, i, n_{\rightarrow\infty}[ \text{ } \Rightarrow i,n \in N \\ } \]
where wi coordinate concur to attractor evolution, but in the rendering is plotted the point pi{xi,yi,zi,wi=0}
In the computational code:
p(x,y,z) / p(x,y,z,w) rappresent the i-th point pi{xi,yi,zi} / pi{xi,yi,zi,wi}
kj→m are constant values characteristic of any single attractor, where k ∈ R and [0,j,m] ⇒ j,m ∈ N
pNew ∈ R3 / R4 is the new point: pi+1{xi+1,yi+1,zi+1} / pi+1{xi+1,yi+1,zi+1,wi+1} that will calculated
In the ATTRACTORS window of glChAoS.P:
left side panel contains starting point coordinates p0{x0,y0,z0} / p0{x0,y0,z0,w0}
right side panel contains constant values used in the expression of the current attractor, where: kj = k[j]
kj values can also be generated randomly between [min, kj, max] interval.
Colors are indicative of point speed: distance between pi and pi+1
You can to start wglChAoS.P with a specific attractor directly from explore button.
Select lowResources for low resources devices (e.g. mobile devices)
Resolution:
X
render in new window
|
\begin{align} x_{i+1} & = y_i - sign(x_i) \centerdot \sqrt{|x_i \centerdot k_1-k_2|} \\ y_{i+1} & = k_0 - x_i \\ z_{i+1} & = w_i - sign(z_i) \centerdot \sqrt{|z_i \centerdot k_4-k_5|}\\ w_{i+1} & = k_3 - z_i \\ \end{align}
explore
float f(float a, float k1, float k2) { return (a>0 ? 1 : -1) * sqrt(abs(k1*a-k2)); } pNew.x = p.y - f(p.x, kVal[1], kVal[2]); pNew.y = kVal[0] - p.x; pNew.z = p.w - f(p.z, kVal[4], kVal[5]); pNew.w = kVal[3] - p.z;
\begin{align} x_{i+1} & = y_i - sin(x_i) \\ y_{i+1} & = k_0 - x_i \\ z_{i+1} & = w_i - sin(z_i) \\ w_{i+1} & = k_1 - z_i \\ \end{align}
explore
pNew.x = p.y - sin(p.x); pNew.y = kVal[0] - p.x; pNew.z = p.w - sin(p.z); pNew.w = kVal[1] - p.z;
\begin{align} x_{i+1} & = y_i - sin(x_i) \\ y_{i+1} & = k_0 - x_i \\ z_{i+1} & = w_i - cos(z_i) \\ w_{i+1} & = k_1 - z_i \\ \end{align}
explore
pNew.x = p.y - sin(p.x); pNew.y = kVal[0] - p.x; pNew.z = p.w - cos(p.z); pNew.w = kVal[1] - p.z;
\begin{align} x_{i+1} & = y_i - cos(x_i) \\ y_{i+1} & = k_0 - x_i \\ z_{i+1} & = w_i - cos(z_i) \\ w_{i+1} & = k_1 - z_i \\ \end{align}
explore
pNew.x = p.y - cos(p.x); pNew.y = kVal[0] - p.x; pNew.z = p.w - cos(p.z); pNew.w = kVal[1] - p.z;
\[ f(\beta, \gamma) = \gamma \centerdot \beta + 2(1-\gamma) \centerdot \beta^2 / (1+\beta^2) \]
\begin{align} x_{i+1} & = y_i + f(x_i, k_0) \\ y_{i+1} & = f(x_{i+1}, k_0) - x_i\\ z_{i+1} & = f(z_i, k_3) + f(y_{i+1}, k_2) + f( f(x_{i+1}, k_0), k_1) \\ \end{align}
explore
float f(float b, float g) { const float b2 = b*b; return g*b + 2.0*(1.0-g)*b2 / (1+b2); }; pNew.x = p.y + f(p.x, kVal[0]); pNew.y = f(pNew.x, kVal[0]) - p.x; pNew.z = f(p.z, kVal[3]) + f(pNew.y, kVal[2]) + f(f(pNew.x, kVal[0]), kVal[1]);
\[ f(\beta, \gamma) = \gamma \centerdot \beta + 2(1-\gamma) \centerdot \beta^2 / (1+\beta^2) \]
\begin{align} x_{i+1} & = k_1 \centerdot y_i + f(x_i, k_0) \\ y_{i+1} & = f(x_i, k_0) - x_i \\ z_{i+1} & = k_3 \centerdot w_i + f(z_i, k_2) \\ w_{i+1} & = f(z_i, k_2) - x_i \\ \end{align}
explore
float f(float b, float g) { const float b2 = b*b; return g*b + 2.0*(1.0-g)*b2 / (1+b2); }; pNew.x = kVal[1]*p.y + f(p.x, kVal[0]); pNew.y = - p.x + f(vp.x, kVal[0]); pNew.z = kVal[3]*p.w + f(p.z, kVal[2]); pNew.w = - p.z + f(vp.z, kVal[2]);
\begin{align} x_{i+1} & = x_i - k_0 \centerdot sin(z_i + tan(k_1 \centerdot z_i)) \\ y_{i+1} & = y_i - k_2 \centerdot sin(x_i + tan(k_3 \centerdot x_i)) \\ z_{i+1} & = z_i - k_4 \centerdot sin(y_i + tan(k_5 \centerdot y_i)) \\ \end{align}
explore
pNew.x = p.x - kVal[0] * sin(p.z+tan(kVal[1]*p.z)); pNew.y = p.y - kVal[2] * sin(p.x+tan(kVal[3]*p.x)); pNew.z = p.z - kVal[4] * sin(p.y+tan(kVal[5]*p.y));
\begin{align} x_{i+1} & = x_i - k_0 \centerdot sin(y_i + tan(k_1 \centerdot y_i)) \\ y_{i+1} & = y_i - k_2 \centerdot sin(x_i + tan(k_3 \centerdot x_i)) \\ z_{i+1} & = z_i - k_4 \centerdot sin(w_i + tan(k_5 \centerdot w_i)) \\ w_{i+1} & = w_i - k_6 \centerdot sin(z_i + tan(k_7 \centerdot z_i)) \\ \end{align}
explore
pNew.x = p.x - kVal[0] * sin(p.y+tan((kVal[1]*p.y)); pNew.y = p.y - kVal[2] * sin(p.x+tan((kVal[3]*p.x)); pNew.z = p.z - kVal[4] * sin(p.w+tan((kVal[5]*p.w)); pNew.w = p.w - kVal[6] * sin(p.z+tan((kVal[7]*p.z));
\begin{align} x_{i+1} & = x_i - k_0 \centerdot sin(y_i + tan(k_1 \centerdot y_i)) \\ y_{i+1} & = y_i - k_2 \centerdot cos(x_i + tan(k_3 \centerdot x_i)) \\ z_{i+1} & = z_i - k_4 \centerdot sin(w_i + tan(k_5 \centerdot w_i)) \\ w_{i+1} & = w_i - k_6 \centerdot sin(z_i + tan(k_7 \centerdot z_i)) \\ \end{align}
explore
pNew.x = p.x - kVal[0] * sin(p.y+tan((kVal[1]*p.y)); pNew.y = p.y - kVal[2] * cos(p.x+tan((kVal[3]*p.x)); pNew.z = p.z - kVal[4] * sin(p.w+tan((kVal[5]*p.w)); pNew.w = p.w - kVal[6] * sin(p.z+tan((kVal[7]*p.z));
\begin{align} x_{i+1} & = x_i - k_0 \centerdot sin(y_i + tan(k_1 \centerdot y_i)) \\ y_{i+1} & = y_i - k_2 \centerdot cos(x_i + tan(k_3 \centerdot x_i)) \\ z_{i+1} & = z_i - k_4 \centerdot sin(w_i + tan(k_5 \centerdot w_i)) \\ w_{i+1} & = w_i - k_6 \centerdot cos(z_i + tan(k_7 \centerdot z_i)) \\ \end{align}
explore
pNew.x = p.x - kVal[0] * sin(p.y+tan((kVal[1]*p.y)); pNew.y = p.y - kVal[2] * cos(p.x+tan((kVal[3]*p.x)); pNew.z = p.z - kVal[4] * sin(p.w+tan((kVal[5]*p.w)); pNew.w = p.w - kVal[6] * cos(p.z+tan((kVal[7]*p.z));
\begin{align} x_{i+1} & = x_i - k_0 \centerdot sin(y_i + tan(k_1 \centerdot y_i)) \\ y_{i+1} & = y_i - k_2 \centerdot sin(x_i + tan(k_3 \centerdot x_i)) \\ z_{i+1} & = z_i - k_4 \centerdot cos(w_i + tan(k_5 \centerdot w_i)) \\ w_{i+1} & = w_i - k_6 \centerdot cos(z_i + tan(k_7 \centerdot z_i)) \\ \end{align}
explore
pNew.x = p.x - kVal[0] * sin(p.y+tan((kVal[1]*p.y)); pNew.y = p.y - kVal[2] * sin(p.x+tan((kVal[3]*p.x)); pNew.z = p.z - kVal[4] * cos(p.w+tan((kVal[5]*p.w)); pNew.w = p.w - kVal[6] * cos(p.z+tan((kVal[7]*p.z));