Outils pour utilisateurs

Outils du site


fractale_de_lyapunov

Ceci est une ancienne révision du document !


Table des matières

Fractale de Lyapunov

C++

#include <fstream>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <string>
 
using namespace std;
 
const int largeur = 200, hauteur = 200;
const int iteration = 10000;
const string sequence = "AAAABBBBBBBBBBBBBBBB";
 
float proportion(float valeur, float valeurMin, float valeurMax, float valeurOutMin, float valeurOutMax) {
    float valeurOut = (valeur - valeurMin) / (valeurMax - valeurMin);
    valeurOut = valeurOutMin + valeurOut * (valeurOutMax - valeurOutMin);
    return valeurOut;
}
 
int main() {
    time_t debut, fin;
    time(&debut);
    float  tableau[iteration];
    tableau[0]= 0.5;
    float a, b;
    float* sequenceTab[sequence.size()];
    for (int i = 0; i < sequence.size(); i++) {
        sequenceTab[i] = (sequence[i] == 'A') ? &a : &b;
    }
    float aValeur[largeur];
    float bValeur[hauteur];
    for (int i = 0; i < largeur; i++) {
        aValeur[i] = proportion(i, 0, largeur, 1.8, 2.2);
    }
    for (int i = 0; i < hauteur; i++) {
        bValeur[i] = proportion(i, 0, hauteur, 3.6, 4);
    }
    ofstream image("Imago.pgm");
    image << "P2" << endl;
    image << largeur << " " << hauteur << endl;
    image << "255" << endl;
    for (int y = 0; y < hauteur; y++) {
        b = bValeur[y];
        for (int x = 0; x < largeur; x++) {
            a = aValeur[x];
            for (int k = 1; k < iteration; k++) {
                tableau[k] = *sequenceTab[k % sequence.size()] * tableau[k - 1] * (1 - tableau[k - 1]);
            }
            float exposant = 0;
            for (int k = 1; k < iteration; k++) {
              exposant += log(abs(*sequenceTab[k % sequence.size()] * (1 - 2 * tableau[k])));
            }
            exposant = exposant / iteration;
 
            int c;
            if ((exposant > 0) || (exposant < -1)) {
              c = 0;
            } else {
              c = floor(proportion(exposant, 0, -1, 255, 0));
            }
            image << c << endl;;
        }
    }
    time(&fin);
    cout << "Durée = " << difftime(fin, debut) << endl;
 
    system("open Imago.pgm");
    return 0;
}

Liens

PPM

fractale_de_lyapunov.1573916676.txt.gz · Dernière modification : 2019/11/16 15:04 de Mushussu