xxxxxxxxxx
93
/*********************************************************************
créé par le Chat de Mistral
C'est une amélioration du script https://editor.p5js.org/Anne-Laure/sketches/qyFB6VrlL
J'ai dit "Exactement ce que je voulais. comment pourrait-on améliorer ce script pour avoir un résultat plus joli (option 1) ou plus hypnotisant (option 2) ? "
L'option 2 est ici.
Mistral comprend que "hypnotisant" peut se traduire par en mouvement !
*********************************************************************/
let circles = [];
let angles = [];
let globalAngle = 0;
function setup() {
createCanvas( windowWidth, windowHeight );
// Initialiser les positions des cercles et les angles de rotation
for (let i = 0; i < 6; i++) {
let angle = map(i, 0, 5, 0, TWO_PI);
let radius = min(width, height) / 3;
let x = width / 2 + radius * cos(angle);
let y = height / 2 + radius * sin(angle);
circles.push({ x, y });
angles.push(0);
}
}
function draw() {
background(0);
translate(width / 2, height / 2);
rotate(globalAngle);
translate(-width / 2, -height / 2);
// Dessiner les cercles et les points tournants
let points = [];
for (let i = 0; i < circles.length; i++) {
let { x, y } = circles[i];
let angle = angles[i];
// Calculer la position du point sur le cercle
let px = x + 50 * cos(angle);
let py = y + 50 * sin(angle);
// Dessiner le cercle avec une pulsation
let siz = 100 + 20 * sin(frameCount * 0.1 + i);
noFill();
stroke(255);
strokeWeight(2);
ellipse(x, y, siz, siz);
// Dessiner le point avec une pulsation
let pointSize = 15 + 5 * sin(frameCount * 0.1 + i);
fill(255);
noStroke();
ellipse(px, py, pointSize, pointSize);
// Mettre à jour l'angle pour la prochaine frame
angles[i] += 0.05;
// Stocker la position du point
points.push({ px, py });
}
// Dessiner les lignes entre les points pour former un hexagone
stroke(255);
strokeWeight(2);
for (let i = 0; i < points.length; i++) {
let { px: px1, py: py1 } = points[i];
let { px: px2, py: py2 } = points[(i + 1) % points.length];
line(px1, py1, px2, py2);
}
// Mettre à jour l'angle global pour la rotation
globalAngle += 0.01;
}
// Redimensionner le canevas lorsque la fenêtre est redimensionnée
function windowResized() {
resizeCanvas(windowWidth, windowHeight);
// Réinitialiser les positions des cercles
circles = [];
for (let i = 0; i < 6; i++) {
let angle = map(i, 0, 5, 0, TWO_PI);
let radius = min(width, height) / 3;
let x = width / 2 + radius * cos(angle);
let y = height / 2 + radius * sin(angle);
circles.push({ x, y });
}
}
// Save a 5-second gif when the user presses the 's' key.
function keyPressed() {
if ( (key === 's') || (key === 'S') ) {
saveGif('mySketch', 3);
}
}