fractale_de_lyapunov
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
fractale_de_lyapunov [2019/11/15 05:13] – [Liens] Mushussu | fractale_de_lyapunov [2020/04/07 16:53] (Version actuelle) – Mushussu | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Fractale de Lyapunov ====== | ====== Fractale de Lyapunov ====== | ||
+ | ===== C++ ===== | ||
+ | <code c++> | ||
+ | // Compilation : g++ Lyapunov.cpp -o Lyapunov | ||
+ | // Execution | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | using namespace std; | ||
+ | |||
+ | int largeur, hauteur; | ||
+ | int iteration; | ||
+ | string sequence; | ||
+ | float bornes[4]; | ||
+ | float limite; | ||
+ | |||
+ | float proportion(float valeur, float valeurMin, float valeurMax, float valeurOutMin, | ||
+ | float valeurOut = (valeur - valeurMin) / (valeurMax - valeurMin); | ||
+ | valeurOut = valeurOutMin + valeurOut * (valeurOutMax - valeurOutMin); | ||
+ | return valeurOut; | ||
+ | } | ||
+ | |||
+ | int main(int argc, char *argv[]) { | ||
+ | if (argc != 10) { | ||
+ | cout << " | ||
+ | return 0; | ||
+ | } | ||
+ | // Initialisation des constantes | ||
+ | sequence = argv[1]; | ||
+ | for (int i = 0; i < 4; i++) { | ||
+ | bornes[i] = stof(argv[i + 2]); | ||
+ | } | ||
+ | largeur = stoi(argv[6]); | ||
+ | hauteur = stoi(argv[7]); | ||
+ | iteration = stoi(argv[8]); | ||
+ | limite = stof(argv[9]); | ||
+ | |||
+ | time_t debut, fin; | ||
+ | time(& | ||
+ | |||
+ | float tableau[iteration]; | ||
+ | tableau[0]= 0.5; | ||
+ | float a, b; | ||
+ | float* sequenceTab[sequence.size()]; | ||
+ | for (int i = 0; i < sequence.size(); | ||
+ | sequenceTab[i] = (sequence[i] == ' | ||
+ | } | ||
+ | float aValeur[largeur]; | ||
+ | float bValeur[hauteur]; | ||
+ | for (int i = 0; i < largeur; i++) { | ||
+ | aValeur[i] = proportion(i, | ||
+ | } | ||
+ | for (int i = 0; i < hauteur; i++) { | ||
+ | bValeur[i] = proportion(i, | ||
+ | } | ||
+ | |||
+ | // Formation du nom du fichier | ||
+ | string nom = " | ||
+ | for (int i = 0; i < 4; i++) { | ||
+ | string s = " | ||
+ | int position = s.find(' | ||
+ | if (position != -1) { | ||
+ | s[position] = ','; | ||
+ | } | ||
+ | nom += s; | ||
+ | } | ||
+ | nom += " | ||
+ | |||
+ | // Création de l' | ||
+ | ofstream image(nom); | ||
+ | image << " | ||
+ | image << largeur << " " << hauteur << endl; | ||
+ | image << " | ||
+ | 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 < limite)) { | ||
+ | c = 0; | ||
+ | } else { | ||
+ | c = floor(proportion(exposant, | ||
+ | } | ||
+ | image << c << endl;; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | time(& | ||
+ | cout << " | ||
+ | const string fonction = "open " + nom; | ||
+ | system(fonction.c_str()); | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====== Processing ===== | ||
+ | <code java> | ||
+ | |||
+ | int iteration = 20000; | ||
+ | int valMin = 0; | ||
+ | |||
+ | void setup() { | ||
+ | size(200, 200); | ||
+ | } | ||
+ | |||
+ | void draw() { | ||
+ | println(hour() + ":" | ||
+ | loadPixels(); | ||
+ | for (int i = 0; i < width; i++) { | ||
+ | for (int j = 0; j < height; j++) { | ||
+ | float a = map(i, 0, width, 1.8, 2.2); | ||
+ | float b = map(j, 0, height, 3.6,4); | ||
+ | float seq[] = {a, a, a, a, b, b, b, b, b,b ,b , b,b , b, b, b, b, b, b, b}; // AAABBBBBAB | ||
+ | | ||
+ | A[0]= 0.5; | ||
+ | for (int k = 1; k < iteration; k++) { | ||
+ | A[k] = seq[k % seq.length] * A[k - 1] * (1 - A[k - 1]); | ||
+ | } | ||
+ | float exposant = 0; | ||
+ | for (int k = 1; k < iteration; k++) { | ||
+ | | ||
+ | } | ||
+ | | ||
+ | |||
+ | int c; | ||
+ | if ((exposant > 0) || (exposant < -1)) { | ||
+ | c = 0; | ||
+ | } else { | ||
+ | c = floor(map(exposant, | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | updatePixels(); | ||
+ | saveFrame(" | ||
+ | println(hour() + ":" | ||
+ | exit(); | ||
+ | } | ||
+ | </ | ||
===== Liens ===== | ===== Liens ===== | ||
- | https:// | + | [[https:// |
- | https:// | + | [[https:// |
=== PPM === | === PPM === | ||
- | https:// | + | [[https:// |
- | https:// | + | [[https:// |
+ | {{tag> |
fractale_de_lyapunov.txt · Dernière modification : 2020/04/07 16:53 de Mushussu