MRaster examples 22.0.0.0
Image Processing Library
Loading...
Searching...
No Matches
peterdejongEAAO.cpp File Reference

For each pixel, simulate a double pendulum system over 2sec and color the pixel according to the pendulum end state. More...

Go to the source code of this file.

Detailed Description

For each pixel, simulate a double pendulum system over 2sec and color the pixel according to the pendulum end state.

Peter de Jong Everywhere All At Once.

Author
Mitch Richling https://www.mitchr.me
Standards
C++20
Details

This code makes a movie of time steps of the solution the Lorenz system. Each pixel is a complete simulation of the Lorenz system with the pixel's color encoding the system state (red for x, green for y, and blue for z). The initial values for x range from -20 to 20, for z they range from 20 to 50, and y is always zero.

For reference the Lorenz system is defined by:

\[ \begin{array}{lcl} \frac{dx}{dt} & = & a(y-x) \\ \frac{dy}{dt} & = & x(b-z)-y \\ \frac{dz}{dt} & = & xy-cz \end{array} \]

Traditional parameter values are:

\[ \begin{array}{lcc} a & = & 10 \\ b & = & 28 \\ c & = & \frac{8}{3} \end{array} \]

And the traditional initial conditions are:

\[ \begin{array}{lcc} x & = & \frac{1}{10} \\ y & = & 0 \\ z & = & 0 \end{array} \]

This program produces an image sequence which may be rendered into a movie with ffmpeg.

       ffmpeg -y -framerate 15 -i lorenz_mM_%4d.tiff -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" -c:v libx264 -crf 30 -b:v 0 -preset veryslow lorenz_mM_100_crf30.mp4;
       ffmpeg -y -framerate 15 -i lorenz_mM_%4d.tiff -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" -c:v libx264 -crf 20 -b:v 0 -preset veryslow lorenz_mM_100_crf20.mp4;
       ffmpeg -y -framerate 15 -i lorenz_mM_%4d.tiff -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" -c:v libx264 -crf 10 -b:v 0 -preset veryslow lorenz_mM_100_crf10.mp4;
       ffmpeg -y -framerate 15 -i lorenz_mM_%4d.tiff -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" -c:v libx264 -crf  3 -b:v 0 -preset veryslow lorenz_mM_100_crf03.mp4;
       ffmpeg -y -framerate 15 -i lorenz_mM_%4d.tiff -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" -c:v libx264 -crf  0 -b:v 0 -preset veryslow lorenz_mM_100_crf00.mp4;
Author
Mitch Richling https://www.mitchr.me
Standards
C++20
Details

Normally when working with the Peter de Jong map we pick a set of parameters (a-h), pick a seed point, and iterate the map a few million times recording all the points the map visits in the plane. We then use this information to color an image – for example by counting the number of times the map hit each pixel. Not much thought is generally given to the choice of the initial seed point, but it impacts the reaulting image. This approach is used in the example peterdejong.cpp. A write up of this example may be found here:

https://www.mitchr.me/SS/swirl/index.html

I called this example "Peter de Jong Everywhere All At Once" because we are using a grid of seed points and simultaneously doing the above process for each pixel in an image. We don't iterate millions of times – just 8 in this case. Then we colorize the result not by hit count, but by the value of the map at each pixel.

Definition in file peterdejongEAAO.cpp.