motifs amazigh

Redécouverte des motifs Amazigh à travers l’Art Génératif

Aujourd’hui, je suis ravi de partager avec vous un voyage fascinant à l’intersection de l’art traditionnel et de la programmation. Mon projet récent vise à recréer les motifs captivants de la broderie amazighe, en utilisant les outils de l’art génératif. Ce projet est un hommage à la richesse de la culture amazighe, où chaque motif raconte une histoire, chaque couleur révèle un sentiment.

La broderie amazighe, un art séculaire, incarne l’essence de la riche histoire et de la culture des peuples amazighs. Cette forme d’art est née d’une tradition ancestrale, transmise de génération en génération, souvent considérée comme un moyen d’expression et de préservation de notre identité culturelle.

Caractérisée par ses motifs géométriques saisissants, la broderie amazighe est plus qu’une simple décoration ; elle est un langage symbolique, racontant des histoires, exprimant des croyances et reflétant les aspects de la vie quotidienne. L’utilisation prédominante de formes géométriques, telles que les carrés, les triangles et les losanges, et leur agencement en motifs symétriques le long des axes X et Y, n’est pas un choix esthétique aléatoire. Cette symétrie représente l’équilibre, l’harmonie et reflète une profonde compréhension de la nature et de l’univers.

motifs amazigh couleurs

L’idée était de capturer cette essence en utilisant un algorithme conçu avec p5.js, une bibliothèque JavaScript pour la création artistique. Cet algorithme dessine des motifs dans une grille, en utilisant des cercles de couleurs aléatoires placés symétriquement. Le résultat est une œuvre d’art dynamique qui change à chaque exécution, reflétant la nature intemporelle de cet art ancestral.

L’insertion des cercles se fait en deux phases, la première place un nombre aléatoire de cercles entre 1 et 10, y affectant 3 couleurs aléatoires et les duplique en symétrie X et Y.

La seconde phase consiste en la création d’un nombre aléatoire de cercle sur cette même grille, entre 4 et 24 en les dupliquant sous X et Y également.

Je ne suis pas un développeur, mon code est brouillon avec plusieurs partie codée en dur, je suis donc certain qu’il y a moyen de l’améliorer, raison pour la quelle je le met en open source.

function setup() {
  canvas = createCanvas(windowWidth, windowHeight);
  noLoop();
}

function draw() {
  background(255);
  noStroke();
  ellipseMode(CENTER);
  for (let x = 55; x <= width - 55; x += 60) {
    for (let y = 55; y <= height - 55; y += 60) {
      // dessin de la case de la grille
      fill(255);
//      rect(x, y, 50, 50);
      // generation aleatoire des couleurs
      let color1 = color(random(0), random(255), random(255));
      let color2 = color(random(0), random(255), random(255));
      let color3 = color(random(0), random(255), random(255));
      let colors = [color1, color2, color3];
      // dessin des cercles symetriques suivant l'axe X et Y


let nbCircles1 = floor(random(1, 10)); // nombre aléatoire de cercles entre 1 et 10
      for (let i = 0; i < nbCircles1; i++) {
        let posX = random(x - 25, x + 25); // position X aléatoire à l'intérieur de la case
        let posY = random(y - 25, y + 25); // position Y aléatoire à l'intérieur de la case
        let colorIndex = floor(random(3)); // choisir une couleur aléatoirement
        fill(colors[colorIndex]);
        ellipse(posX, posY, 5, 5); // dessiner le cercle
        // Dessiner les cercles symétriques
        ellipse(2 * x - posX, posY, 5, 5);
        ellipse(posX, 2 * y - posY, 5, 5);
        ellipse(2 * x - posX, 2 * y - posY, 5, 5);
      }         
            

      let nbCircles2 = floor(random(4, 24)); // nombre de cercles aleatoire entre 4 et 24
      let circles = []; // tableau pour stocker les positions des cercles
      // generation aleatoire des positions des cercles
      for (let i = 0; i < nbCircles2; i++) {
        let posX = floor(random(1, 10)) * 5 - 22.5; // position aleatoire ajustee a  l'interieur de la case
        let posY = floor(random(1, 10)) * 5 - 22.5; // position aleatoire ajustee a  l'interieur de la case
        // verification si la position n'est pas deja  occupee par un cercle
        while (circles.includes([posX, posY]) || circles.includes([-posX, posY]) || circles.includes([posX, -posY]) || circles.includes([-posX, -posY])) {
          posX = floor(random(1, 10)) * 5 - 22.5; // position aleatoire ajustee a  l'interieur de la case
          posY = floor(random(1, 10)) * 5 - 22.5; // position aleatoire ajustee a  l'interieur de la case
        }
        circles.push([posX, posY]);
      }
     
  // dessin des cercles symetriques suivant l'axe X et Y
  for (let i = 0; i < circles.length; i++) {
    let posX = circles[i][0];
    let posY = circles[i][1];
    ellipse(x + posX, y + posY, 5, 5);
    ellipse(2 * x - (x + posX), y + posY, 5, 5);
    ellipse(x + posX, 2 * y - (y + posY), 5, 5);
    ellipse(2 * x - (x + posX), 2 * y - (y + posY), 5, 5);
  }
}
}
}

function mousePressed() {
redraw();
}

Nombre de combinaisons possible pour chaque motifs unique

Le calcul du nombre de motifs uniques possibles est une question intrigante. Si l’on considère trois couleurs choisies aléatoirement pour chaque motif, avec une disposition symétrique des cercles, le nombre de variations est pratiquement infini.

La somme s’étend de ( m = 4 ) à ( m = 24 ), couvrant toutes les possibilités de 4 à 24 cercles dans un quart de motif. Cela tient compte de la symétrie du motif entier, où placer ( m ) cercles dans un quart de motif implique la présence de 4 fois ( m ) cercles dans l’ensemble du motif.

Même en simplifiant, en utilisant uniquement des cercles noirs, l’algorithme peut générer environ 114,722,545,465,466,102,559,045 motifs uniques. J’avoue que même moi j’ai été surpris par ce résultat. Ce calcul est basé sur la formule mathématique suivante (corrigez-moi si je me trompe)

M = \sum_{4}^{24} \binom{100}{m}

M représente le nombre total de motifs uniques possibles.
M = \binom{100}{m} ( \binom{100}{m} ) est le nombre de combinaisons de ( m ) éléments parmi 100, ce qui représente le choix de ( m ) positions uniques parmi 100 positions possibles dans un quart de motif.

Explication détaillée : Chaque motif est composé de cercles placés à l’intérieur d’une grille. Pour calculer le nombre de motifs uniques possibles, j’ai pris en compte les positions des cercles dans un quart de motif, en raison de la symétrie du motif complet. Chaque case de la grille offre 100 positions potentielles pour les cercles, et étant donné la symétrie, j’examine uniquement un quart de chaque case. Ainsi, le calcul consiste à déterminer combien de façons différentes il existe de placer entre 4 et 24 cercles dans ces 100 positions, ce qui donne lieu à un nombre astronomique de combinaisons et, par conséquent, à un éventail presque infini de motifs uniques.

Invitation à modifier mon code

Ce projet est plus qu’une simple exploration technique ; c’est une célébration de la culture amazighe à travers le prisme de la technologie moderne. Il montre comment des outils numériques peuvent être utilisés pour revisiter et redonner vie à des traditions ancestrales. À travers ce projet, j’espère inspirer d’autres à explorer l’art génératif et à découvrir le potentiel illimité de la programmation créative dans la célébration de notre patrimoine culturel.

Le code est disponible en open source sur GitHub, offrant à tous la possibilité d’explorer, de tester, et surtout d’améliorer cet algorithme. C’est une invitation ouverte à la communauté des artistes numériques, des programmeurs, et des passionnés de culture à s’engager dans ce projet, à expérimenter et à apporter leur propre touche créative.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Retour en haut