xxxxxxxxxx
/*
BERNARD MOUVAULT
*/
var Centre, Rayon;
var Pt_C1, Pt_C2, Pt_C3, Pt_C4; // points d'ancrage du sketch
var T0; // Début demi période
var Periode = 15000; // Demi période (en milli secondes)
var pente = true; // true si BETA croissant
var BETA; // Angle de déviation en radians
var k1; // Object O_Cluster
var vect_h, vect_v; // Vecteurs UNITE GRID horizontal et vertical
var ITERATIONS_0, COLORS_0, RANDOM_LOGO_0, SPAN_LOGO_0, PENTE_0; // Curseurs et "pente" au précédent "draw"
var NB_GRID = [ 1, 3, 7, 15, 31, 63, 127 ] // Nbre GRID = f(nombre d'itérations)
var NB_GRID_0, NB_GRID_1; //= nb_GRID[ ITERATIONS - 1 ] / nb_GRID[ ITERATIONS ];;
var NUM_GRID; // Numéro de GRID
//=== Définition des GRIDs et du LOGO associé
var init_GRID;
var random_shape = []; // Initialisé de 0 à 8 dans setup()
var random_color = []; // Initialisé de 0 à 30 dans setup()
var LINES_LOGO = [], COLOR_GRID = [], COLORS_LINES = [];
var LINES_LOGO_0; // Rotation en C3
var LINES_LOGO_1; // Rotation en C4
var t0_GRID_R = [], periode_GRID_R = [];
//===
const PALETTE_0 = ["#fff",true,"#1e32aa","#82afff", "#0564ff"];
const PALETTES = [
["#e9dbce", "#fceade", "#ea526f", "#e2c290", "#6b2d5c"],
["#223843", "#e9dbce", "#eff1f3", "#dbd3d8", "#d8b4a0"],
["#e29578", "#ffffff", "#006d77", "#83c5be", "#ffddd2"],
["#e9dbce", "#ffffff", "#cc3528", "#028090", "#00a896"],
["#e9dbce", "#f8f7c1", "#f46902", "#da506a", "#fae402"],
["#e42268", "#fb8075", "#761871", "#5b7d9c", "#a38cb4"],
['#f9b4ab', '#fdebd3', '#264e70', '#679186', '#bbd4ce'],
['#1f306e', '#553772', '#8f3b76', '#c7417b', '#f5487f'],
['#e0f0ea', '#95adbe', '#574f7d', '#503a65', '#3c2a4d'],
['#413e4a', '#73626e', '#b38184', '#f0b49e', '#f7e4be'],
['#ff4e50', '#fc913a', '#f9d423', '#ede574', '#e1f5c4'],
['#99b898', '#fecea8', '#ff847c', '#e84a5f', '#2a363b'],
['#69d2e7', '#a7dbd8', '#e0e4cc', '#f38630', '#fa6900'],
['#fe4365', '#fc9d9a', '#f9cdad', '#c8c8a9', '#83af9b'],
['#ecd078', '#d95b43', '#c02942', '#542437', '#53777a'],
['#556270', '#4ecdc4', '#c7f464', '#ff6b6b', '#c44d58'],
['#774f38', '#e08e79', '#f1d4af', '#ece5ce', '#c5e0dc'],
['#e8ddcb', '#cdb380', '#036564', '#033649', '#031634'],
['#490a3d', '#bd1550', '#e97f02', '#f8ca00', '#8a9b0f'],
['#594f4f', '#547980', '#45ada8', '#9de0ad', '#e5fcc2'],
['#00a0b0', '#6a4a3c', '#cc333f', '#eb6841', '#edc951'],
['#5bc0eb', '#fde74c', '#9bc53d', '#e55934', '#fa7921'],
['#ed6a5a', '#f4f1bb', '#9bc1bc', '#5ca4a9', '#e6ebe0'],
['#ef476f', '#ffd166', '#06d6a0', '#118ab2', '#073b4c'],
['#22223b', '#4a4e69', '#9a8c98', '#c9ada7', '#f2e9e4'],
['#114b5f', '#1a936f', '#88d498', '#c6dabf', '#f3e9d2'],
['#ff9f1c', '#ffbf69', '#ffffff', '#cbf3f0', '#2ec4b6'],
['#3d5a80', '#98c1d9', '#e0fbfc', '#ee6c4d', '#293241'],
['#06aed5', '#086788', '#f0c808', '#fff1d0', '#dd1c1a'],
['#540d6e', '#ee4266', '#ffd23f', '#3bceac', '#0ead69'],
['#c9cba3', '#ffe1a8', '#e26d5c', '#723d46', '#472d30'] ]
//====================================================
//==== SETUP, SETUP, SETUP, .........
//====================================================
function setup() {
createCanvas(windowWidth, windowHeight);
// === Points d'ancrage du sketch
Centre = createVector((windowWidth / 2) * 1.0, (windowHeight / 2) * 1.175);
Rayon = windowHeight * 0.75 / 2;
//== Points Haut-Gauche (C2) et Bas-Droit (C4) du carré de base
Pt_C1 = createVector(Rayon, -Rayon);
Pt_C1.add(Centre);
Pt_C2 = createVector(- Rayon, -Rayon);
Pt_C2.add(Centre);
Pt_C3 = createVector(- Rayon, Rayon);
Pt_C3.add(Centre);
Pt_C4 = createVector(Rayon , Rayon);
Pt_C4.add(Centre);
//=== Init du tableau des indices pour random_color
for (var j = 0; j < 31; j++) { random_color[j] = j };
//==== Initialisation des LOGOs aléatoires sur tous les GRIDs
OPC.slider("ITERATIONS", 3, 0, 5, 1);
OPC.slider("COLORS", 1, 0, 1, 1);
OPC.slider("RANDOM_LOGO", 1, 0, 1, 1);
OPC.slider("SPAN_LOGO", 9, 7, 9, 2);
init_GRID = true;
ITERATIONS_0 = -1;
COLORS_0 = 1;
RANDOM_LOGO_0 = 1;
SPAN_LOGO_0 = 9;
//=== LOGO "OFFICIEL" - COULEURS et COURBES DANS 2 REPERES DIFFERENTS
COLOR_GRID[0] = PALETTE_0[0];
COLORS_LINES[0] = [ PALETTE_0[2], PALETTE_0[3], PALETTE_0[4] ];
//===
var LINE1_0 = [ 4, 2, 1, 6];
var LINE2_0 = [ 1, 3, 2, 5 ];
var LINE3_0 = [ 4, 1, 7, 1, 7, 5, 4, 5 ];
var LINE1_1 = [ 6, 4, 2, 1];
var LINE2_1 = [ 5, 1, 3, 2 ];
var LINE3_1 = [ 7, 4, 7, 7, 3, 7, 3, 4 ];
LINES_LOGO_0 = [ LINE1_0, LINE2_0, LINE3_0 ]; // Rotation en C3
LINES_LOGO_1 = [ LINE1_1, LINE2_1, LINE3_1 ]; // Rotation en C4
// === Animation - Début de demi période
T0 = millis();
// Creation d'un objet O_Cluster
k1 = new O_Cluster();
}
//====================================================
//==== DRAW, DRAW, DRAW, .........
//====================================================
function draw() {
colorMode(HSB);
background(200, 72, 47);
smooth();
strokeCap(SQUARE);
//===
NB_GRID_1 = NB_GRID[ ITERATIONS ]; // NB GRIDs après la dernière itération
NB_GRID_0 = NB_GRID[ ITERATIONS - 1 ]; // NB GRIDs après l'avant dernière itération
//=== Init des points utilisables sur GRID (SPAN_LOGO réduit or SPAN_LOGO full)
random_shape.length = 0;
if (SPAN_LOGO == 7) { for (var i = 1; i < 8; i++) { random_shape[i - 1] = i } } // SPAN_LOGO réduit (1-7)
else { for (var j = 0; j < 9; j++) { random_shape[j] = j } } // SPAN_LOGO full (0-9)
//=== Création aléatoire de la BDD des LOGOs
NUM_GRID = 0; // # GRID
if (ITERATIONS == ITERATIONS_0) {} else { init_GRID = true; ITERATIONS_0 = ITERATIONS }
if (COLORS == COLORS_0) {} else { init_GRID = true; COLORS_0 = COLORS }
if (RANDOM_LOGO == RANDOM_LOGO_0) {} else { init_GRID = true; RANDOM_LOGO_0 = RANDOM_LOGO }
if (SPAN_LOGO == SPAN_LOGO_0) {} else { init_GRID = true; SPAN_LOGO_0 = SPAN_LOGO }
if (pente == PENTE_0) {} else { init_GRID = true; PENTE_0 = pente }
FUNCTION_RANDOM_LOGO(); // Creation aléatoire d'un LOGO pour chaque GRID (carré)
init_GRID = false;
// Pilotage de l'angle BETA déplaçant le point M (par exemple sur l'arc
// de cercle de centre C3 et passant par C2 et C4 )
var delta_t = millis() - T0;
if ( delta_t >= Periode ) { T0 = millis(); pente = !pente }
if (pente) {
BETA = -HALF_PI * map(delta_t, 0.0, Periode, 0.0, 1.0);
k1.carre_de_base(Pt_C2, Pt_C4)}
else {
BETA = -HALF_PI * map(delta_t, 0.0, Periode, 1.0, 0.0)
k1.carre_de_base(Pt_C3, Pt_C1) }
// === Creation du carré de base, Iterate et Display
k1.Squares[0].display();
//=
for (var i = 0; i < ITERATIONS; i++) {
k1.iterate();
for (j = 0; j < k1.Squares.length; j++) { k1.Squares[j].display() }
}
} // <= END OF DRAW
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//
// CREATION ALEATOIRE DE LOGOs ( 2 + 2 + 4 = 8 couples de points X-Y
// et 3 couleurs pour chaque LOGO )
//
function FUNCTION_RANDOM_LOGO () {
for (var i = 0; i < NB_GRID_1; i++) {
//=== Traitement des 2 LOGOs de base qui n'évoluent pas
//=== (couleurs figées pour : 2 lignes + 1 bézier (officiel)
if (i == 0 ) {
//=== Coordonnées des 8 points du LOGO officiel dans
// 2 repères différents (rotation en C3 puis C4)
if (pente) { LINES_LOGO[0] = LINES_LOGO_0 } // Rotation en C3
else { LINES_LOGO[0] = LINES_LOGO_1 } // Rotation en C4
}
else if ( i == NB_GRID_0 ) {
COLOR_GRID[i] = COLOR_GRID[0];
COLORS_LINES[i] = COLORS_LINES[0];
//=== Coordonnées des 8 points du LOGO officiel dans
// 2 repères différents (rotation en C3 puis C4)
LINES_LOGO[i] = LINES_LOGO[0];
}
//=== Traitement des GRIDs et LOGOs animés
else {
if ( init_GRID || (millis() - t0_GRID_R[i]) > periode_GRID_R[i] ) {
t0_GRID_R[i] = millis();
periode_GRID_R[i] = random(1500, 5000);
//===
if (COLORS == 1) {
var palette_R = PALETTES [random(random_color)];
COLOR_GRID[i] = palette_R[0];
COLORS_LINES[i] = [ palette_R[2], palette_R[3], palette_R[4] ]}
else {
COLOR_GRID[i] = COLOR_GRID[0];
COLORS_LINES[i] = COLORS_LINES[0];
}
//=== Création de 3 lignes au hazard (droite ou bézier => 4 ou 8 points)
if (RANDOM_LOGO == 1 ) {
var L1 = [], L2 = [], L3 = [];
var P_F, NB_PTS;
P_F = int(random(0.0, 2.0));
//console.log(P_F);
if (P_F << 1) { NB_PTS = 4 }
else { NB_PTS = 8 }
for (var k1 = 0; k1 <NB_PTS; k1++) { L1[k1] = random(random_shape) }
//=
P_F = int(random(0.0, 2.0));
if (P_F << 1) { NB_PTS = 4 } else { NB_PTS = 8 };
for (var k2 = 0; k2 <NB_PTS; k2++) { L2[k2] = random(random_shape) }
//=
P_F = int(random(0.0, 2.0));
if (P_F << 1) { NB_PTS = 4 } else { NB_PTS = 8 };
for (var k3 = 0; k3 <NB_PTS; k3++) { L3[k3] = random(random_shape) }
//====
LINES_LOGO[i] = [ L1, L2, L3 ];
}
//=== Si "mode random" non activé => Lignes "officielles"
else { LINES_LOGO[i] = LINES_LOGO[0] };
}
} // <= End boucle sur les GRIDs et LOGOS animés
} // <= End GRID figées ou animées
} // <= End function