bunex-industries

Jeu de la vie interactif

Le plus célèbre des automates cellulaires avec les canvas HTML. Cliquez sur le canvas pour allumer/éteindre une cellule ou lancer un glider. wikipedia

Run | gliders | Clear | Random

À noter l'emploi d'une fonction de rotation d'un point de la matrice selon un centre de rotation et par 1/4 de tour. Les symétries d'axes vertical et horizontal sont traités. Ceci est pratique car les gliders sont codés longuement en dur, dans une seule orientation. Il faut préciser que les motifs de gliders restent des gliders par rotations de 90° et symétries en X et/ou Y.

La fonction prend un N° de d'ordre dans un tableau n*n = N éléments et retourne le N° d'ordre du point de la matrice transformé.

function rotatePoint(pt, o, sect, mirx, miry)
{
    var alpha = sect * Math.PI/2;
    var ptx = pt%n;
    var pty = Math.floor(pt/n);

    var ox = o%n;
    var oy = Math.floor(o/n);

    ptx = ptx - ox;
    pty = pty - oy;

    var xx = ptx*Math.cos(alpha) - pty*Math.sin(alpha);
    var yy = ptx*Math.sin(alpha) + pty*Math.cos(alpha);

    xx = (1-2*mirx)*xx;
    yy = (1-2*miry)*yy;

    xx = Math.floor(xx + ox);
    yy = Math.floor(yy + oy);

    var ii = (xx + n*yy)%N;
    return ii;
}