Snowflakes 006

Multiple Snowflakes working towards snowflakes Dan Catt see his work at: revdancatt.com/penplotter/036-snowflakes Dan's list of Pen Plotter Tools at: revdancatt.com/penplotter/

Log in to post a comment.

// Forked from "Snowflake 005" by rupertxrussell
// Draw Multiple Snoflakes
// https://turtletoy.net/turtle/6fcb393f39

// Forked from "Stars 001" by rupertxrussell
// https://turtletoy.net/turtle/01d0bf10d6

// You can find the Turtle API reference here: https://turtletoy.net/syntax
// MIT Licence

// Draw a Single Snowflake
// working towards  Dan Catt's snowflakes
// see his work at: https://revdancatt.com/penplotter/036-Snowflakes  
// See Dan's full list of Pen Plotter Tools at: https://revdancatt.com/penplotter/ 

Canvas.setpenopacity(1);

let maxScale=20; //min=2 max=25 step=1
const turtle = new Turtle();

// generate a random number of branches
// let nBranches = 3; //min=2 max=15 step=1
let xPos = 0;
let yPos = 0;
let nBranches = 0;
let xOffset = 46 //min=20 max=55 step=1
let yOffset = 46 //min=20 max=55 step=1
for (let yPos = -70; yPos < 90; yPos = yPos + yOffset){
    for (let xPos = -70; xPos < 90; xPos = xPos + xOffset){
       
        if(nBranches == 1){
            nBranches = 2
        }
            snowFlake(xPos, yPos, nBranches);
        nBranches ++;
    }
}

function snowFlake(xPos, yPos, nBranches) {
   // scale =  getRandomInt(maxScale + 1); 
    scale = maxScale;
    armLength = scale;
    turtle.penup();
    turtle.goto(xPos, yPos);

    // N S  arm
    turtle.penup();
    turtle.goto(xPos, yPos);
    turtle.pendown();
    turtle.setheading(90);
    turtle.penup();
    turtle.forward(scale);
    let position3 = turtle.position();
    turtle.pendown();
    turtle.right(180);
    turtle.forward(scale * 2);
    let position0 = turtle.position();
    
    // NW SE arm
    turtle.penup();
    turtle.goto(xPos, yPos);
    turtle.pendown();
    turtle.setheading(30);
    turtle.penup();
    turtle.forward(scale);  
    turtle.pendown();
    let position2 = turtle.position();
    turtle.right(180);
    turtle.forward(scale * 2);
    let position5 = turtle.position();
        
    // SW NE arm
    turtle.penup();
    turtle.goto(xPos, yPos);
    turtle.setheading(-30); 
    turtle.penup();
    turtle.forward(scale);
    turtle.pendown();
    let position1 = turtle.position();
    turtle.right(180);
    turtle.forward(scale * 2);
    let position4 = turtle.position();

    /*
    // draw star of david
    turtle.jump(position0);
    turtle.pendown();
    turtle.goto(position2)
    turtle.goto(position4)
    turtle.goto(position0)

    turtle.jump(position5);
    turtle.pendown();
    turtle.goto(position1)
    turtle.goto(position3)
    turtle.goto(position5)
    */
    
    // draw nBarnches
    let stepLength = armLength / nBranches;
    
    for(let arm = 0; arm < 6; arm ++){
    
        for(let n = 1; n < nBranches; n ++){
            let branchLength = (armLength - stepLength * n) / 2
            // go to center of the snowflake
            turtle.setheading(30 +  arm * 60);
            turtle.penup();
            turtle.goto(xPos, yPos);
            turtle.right(180);
            turtle.forward(stepLength * n);
            turtle.right(60);
            turtle.pendown();
            turtle.forward(branchLength);
            turtle.back(branchLength);
            turtle.left(60 * 2)
            turtle.forward(branchLength);
        }
    }
}

// Used to draw the angled branches
function branch(armLength, stepLength){
    let branchLength = (armLength - stepLength) / 2
    return branchLength;
}

function getRandomInt(max) {
    return Math.floor(Math.random() * max);
}