Skip to content

sophonet/symmetryinchaos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Symmetry in Chaos

This repository contains code and parameters for rendering the images published in the book "Symmetry in Chaos" (1st edition) by Michael Field and Martin Golubitsky.

Symmetry in Chaos - Emperor's Cloak

An webpage utilizing WebAssembly for rendering in the browser can be found on the github page https://sophonet.github.io/symmetryinchaos/.

Theory

In their book, Field and Golubitsky summarize mathematical properties of symmetry as well as fundamentals of the chaotic behavior of non-linear systems like strange attractors. They then introduce functions that by design falls into the category of logistic maps while on the other hand has built-in properties of symmetry. This function yield symmetric chaotic pointsets that are colored by their number of hits during iteration. Their book includes more details about both symmetry as well as chaos that can be found in nature.

Prerequisites

The code uses the following external software packages:

Installing prerequisites for the native application

  • On MacOS, the three packages can be installed with Homebrew:
brew install sdl12-compat
brew install nlohmann-json
brew install cxxopts
  • On linux, these packages should be available in your distribution's package manager.

  • All packages are also available in the Conan center.

Installing prerequisites for WebAssembly.

The installation description below uses Emscripten as a docker image, which already includes SDL. Furthermore, cxxopts for command line parameters are not needed for a browser application. The easiest way here to install nlohmann-json is to use git:

git clone --depth 1 https://github.com/nlohmann/json.git

Installation

The single cpp source file can easily be compiled to a runtime executable, which is why build systems like CMake are not necessary, if the prerequisites are installed at default locations:

g++ -o symmetryinchaos -std=c++14 -lSDL symmetryinchaos.cpp

The WebAssembly for running the code in a website can be built using the Emscripten compiler, e.g. using docker, after cloning nlohmann/json with

docker run \
  --rm \
  -v $(pwd):/src \
  -u $(id -u):$(id -g) \
  emscripten/emsdk \
  emcc symmetryinchaos.cpp -I json/include -O2 \
  -sEXPORTED_FUNCTIONS=_main,_launch \
  -sEXPORTED_RUNTIME_METHODS=ccall -o index.js

Dataset file

The datasets.json file contains parameters for all datasets that are described in the first edition of the book. Color maps have been inspired by another software package https://symmetrichaos.sourceforge.net/ which is now unmaintained.