La curva di Koch

    function koch( x1, y1, x2, y2, livello ) {
    livello++;
    if (livello < 5) {
        let dx = (x2 - x1) / 3;
        let dy = (y2 - y1) / 3;
        let ax = x1 + dx;
        let ay = y1 + dy;
        let bx = x1 + 2*dx;
        let by = y1 + 2*dy;
        let px = (x1 + x2)/2 + dy * 0.866;
        let py = (y1 + y2)/2 - dx * 0.866;
        koch( x1, y1, ax, ay, livello );
        koch( ax, ay, px, py, livello );
        koch( px, py, bx, by, livello );
        koch( bx, by, x2, y2, livello );
    } else {
        line( x1, y1, x2, y2 );
    }
}

function setup() {
    createCanvas( 670, 240 );
    background( 255 );
    koch( 35, 200, 635, 200, 0 );
}
  

Schema

I punti ax, ay e bx, by dividono il segmento in tre parti uguali, a passi di dx e dy. Il terzo centrale, tratteggiato, lascia il posto a due lati di un triangolo equilatero, con la punta px, py sulla perpendicolare dal punto medio.

Spiegazione


  

Un terzo dello spostamento orizzontale e verticale del segmento, che permette di trovare i due punti che lo dividono in tre parti uguali: ax, ay e bx, by.


  

La punta del triangolo equilatero costruito sul terzo centrale. Dal punto medio del segmento ci si sposta in direzione perpendicolare, che si ottiene scambiando dx e dy e cambiando segno a uno dei due, per l’altezza del triangolo: 0.866, la metà della radice di 3, moltiplicato per il lato.


  

Al posto del segmento, quattro autochiamate per i quattro segmenti lunghi un terzo. Solo all’ultimo livello i segmenti vengono disegnati.

Suggerimenti

Cambiando il 5 della condizione si vedono i livelli precedenti: con 1 resta il solo segmento.

Per il fiocco di neve di Koch, tre curve sui lati di un triangolo, la tela va alzata a 400 pixel:


  

Il triangolo di Sierpinski si ottiene invece con tre autochiamate su tre triangoli con il lato dimezzato, da avviare con sierpinski( 210, 230, 250, 0 ):