Truchet Tiles 004

Thanks to Dan Catt see:
youtu.be/1qlwiyrdeom?feature=shared&t=61

Log in to post a comment.

// Forked from "Truchet Tiles 001" by rupertxrussell
// https://turtletoy.net/turtle/ea4178a3db

// My first Turchet Tiles
// inspired by Rev Dan Catt 70's Pop 
// https://shop.revdancatt.com/collections/pen-plots/products/70s-pop-tiles-a3-64-up-2
// https://www.youtube.com/watch?v=1QLWiyrDEOM

// Released under the MIT licence 
// https://mit-license.org/
// you can use this for commercial gain if you like eg you can sell artworks with this image.

// You can find the Turtle API reference here: https://turtletoy.net/syntax
// This version allows you to see the same pattern with and without margins or borders
// it does not generate a new set of randome tiles each time it runs but reads the tiles from an array

Canvas.setpenopacity(1);

// Global code will be evaluated once.

const turtle = new Turtle();
const scale = 22.5; // min=20 max=24.5 step=0.25
const margin = 1.25; // min=0 max=4.25 step=0.25
const drawBorders = 1; // min=0 max=1 step=1 (No, Yes)
const tiles = [1,0,0,3,1,3,1,3,0,3,3,2,2,1,0,0,1,0,1,3,0,3,2,3,0,3,0,3,1,3,3,0,1,0,1,0,1,2,0,3,2,2,2,3,3,0,2,2,0,2,3,0,2,3,2,0,0,0,0,2,1,3,3,3]; 

var count = 0;

for(var i = -4; i < 4; i++){
    for(var j =-4; j < 4; j++){
    
        rand = tiles[count];  // get next number from the array
        count ++;
        if(rand == 0){
            turtle.jump(i * scale, j * scale)
            turtle.penup();
            turtle.forward(margin * i);
            turtle.right(90);
            turtle.forward(margin * j)
            turtle.left(90);
            square(1) 
        }
    
        if(rand == 1){
            turtle.jump(i * scale, j * scale);
            turtle.penup();
            turtle.forward(margin * i);
            turtle.right(90);
            turtle.forward(margin * j)
            turtle.left(90);            
            turtle.forward(scale) // reposition 
            turtle.right(90);
            square(1) 
            turtle.penup();
            turtle.left(90);
            turtle.back(scale) // reposition 
        }
    
        if(rand == 2){
            turtle.jump(i * scale, j * scale);
            turtle.penup();
            turtle.forward(margin * i);
            turtle.right(90);
            turtle.forward(margin * j)
            turtle.left(90);
            turtle.right(180);
            turtle.jump(turtle.xcor()+scale, turtle.ycor()+scale);
            square(1) 
            turtle.left(180);
        }
    
        if(rand == 3){
            turtle.jump(i * scale, j * scale);
            turtle.penup();
            turtle.forward(margin * i)
            turtle.right(90);
            turtle.forward(margin * j)
            turtle.left(90);
            turtle.right(270);
            turtle.jump(turtle.xcor(), turtle.ycor()+scale);
            square(1) 
            turtle.left(270);
        }      
    }
}

function square(n) {
    turtle.pendown();
    
    // Square type 1
    if(n==1){
        for(var n=1; n<9; n++){
            // draw 8 arcs
            turtle.penup();
            turtle.forward(scale/8); 
            turtle.right(90);
            turtle.pendown();
            turtle.circle(scale/8*n, 90);
            turtle.penup();
            turtle.circle(scale/8*n, -90);
            turtle.left(90);     
            
        }
        // finish square
        
        if(drawBorders ==  1){    
            turtle.pendown();
        }
        for(var sides = 0; sides <4; sides++ ){
            turtle.right(90);
            turtle.forward(scale);
        }
        
    // move to SE corner
    turtle.penup();
    turtle.right(90);
    turtle.forward(scale);
    
    // first small arc 
    turtle.left(270);
    for(var n=1; n<4; n++){
        // draw 3 full small arcs
        turtle.penup();
        turtle.forward(scale/8); 
        turtle.right(90);
        turtle.pendown();
        turtle.circle(scale/8*n, 90);
        turtle.penup();
        turtle.circle(scale/8*n, -90);  // reverse arc to edge
        turtle.left(90);     
       // turtle.pendown();
    }
  
    // South 1st half arc  
    turtle.forward(scale/8);
    turtle.right(90);
    turtle.pendown();
    turtle.circle(scale/8*4, 17);
    turtle.penup();
    turtle.circle(scale/8*4, -17); // reverse arc to edge
    turtle.left(90);     
    turtle.pendown();
     
    // east 1st half arc  
    turtle.penup();
    turtle.right(180);
    turtle.forward(4 * scale/8);
    turtle.left(90);
    turtle.forward(4 * scale/8)
    turtle.left(270);
    turtle.pendown();
    turtle.circle(scale/8*4,-17); 
    turtle.penup();
    turtle.circle(scale/8*4, 17); // reverse arc to edge
    turtle.right(270);     
    turtle.penup();
    
    // east 2nd half arc  
    turtle.penup();
    turtle.forward(scale/8);
    turtle.left(270);
    turtle.pendown()
    turtle.circle(scale/8*5, -6.8);
    turtle.circle(scale/8*5, 6.8);  // reverse arc to edge

    // start east 3rd half arc
    turtle.left(90);
    turtle.penup();
    turtle.forward(scale/8);
    turtle.left(270);
    turtle.pendown();
    turtle.circle(scale/8*6, -2.42);
    turtle.circle(scale/8*6, 2.42);  // reverse arc to edge
    // end 3rd half arc 

    // start of south 2rd half arc
    // move around the square to start pos
    turtle.penup();
    turtle.right(90)
    turtle.forward(6* scale/8);
    turtle.right(90)
    turtle.forward(5* scale/8);
    turtle.pendown()
    
    turtle.right(90);
    turtle.pendown()
    turtle.circle(scale/8*5, 6.8);
    turtle.penup();
    turtle.circle(scale/8*5, -6.8);

    // start of south 3rd half arc
    // move around the square to start pos
    turtle.penup();
    turtle.left(90);
    turtle.forward(scale/8);
    turtle.right(270);
    turtle.pendown();
    turtle.circle(scale/8*6, -2.42);
    turtle.circle(scale/8*6, 2.42)
   
    // start of south 4rd half arc
    // move around the square to start pos
    turtle.penup();
    turtle.right(90);
    turtle.forward(scale/8);
    turtle.right(270);
    turtle.pendown();
    turtle.circle(scale/8*6, -0.6); // -0.4
    turtle.circle(scale/8*6, 0.6)
  
    // start of east 4rd half arc
    // move around the square to start pos
    turtle.penup();
    turtle.right(90);
    turtle.forward(scale/8);
    turtle.right(270);
    turtle.pendown();
    turtle.circle(scale/8*6, -0.6); // -0.4
    turtle.circle(scale/8*6, 0.6)
    
    turtle.right(90);
    turtle.right(90);
    turtle.right(90);
    
    //turtle.seth(0);
    }  // end of square type 1
    
} // end of function Square

 
function drawTurtle(turtleScale){
    var originalHeading =turtle.heading();   
    turtle.pendown();
    turtle.right(160);
    turtle.forward(turtleScale*.25);
    turtle.back(turtleScale*.25);
    turtle.left(160 *2);
    turtle.forward(turtleScale*.25);
    turtle.back(turtleScale*.25);
    turtle.seth(originalHeading);
    turtle.penup();
}

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