1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| var canvas = document.querySelector('canvas'); var context = canvas.getContext('2d');
var size = 320; var dpr = window.devicePixelRatio; canvas.width = size * dpr; canvas.height = size * dpr; context.scale(dpr, dpr); context.lineWidth = 7; var step = size / 12; var white = '#F2F5F1'; var colors = ['#D40920', '#1356A2', '#F7D842']
var squares = [{ x: 0, y: 0, width: size, height: size }];
function splitSquaresWith(coordinates) { const { x, y } = coordinates;
for (var i = squares.length - 1; i >= 0; i--) { const square = squares[i];
if (x && x > square.x && x < square.x + square.width) { if(Math.random() > 0.5) { squares.splice(i, 1); splitOnX(square, x); } }
if (y && y > square.y && y < square.y + square.height) { if(Math.random() > 0.5) { squares.splice(i, 1); splitOnY(square, y); } } } }
function splitOnX(square, splitAt) { var squareA = { x: square.x, y: square.y, width: square.width - (square.width - splitAt + square.x), height: square.height };
var squareB = { x: splitAt, y: square.y, width: square.width - splitAt + square.x, height: square.height };
squares.push(squareA); squares.push(squareB); }
function splitOnY(square, splitAt) { var squareA = { x: square.x, y: square.y, width: square.width, height: square.height - (square.height - splitAt + square.y) };
var squareB = { x: square.x, y: splitAt, width: square.width, height: square.height - splitAt + square.y };
squares.push(squareA); squares.push(squareB); }
for (var i = 0; i < size; i += step) { splitSquaresWith({ y: i }); splitSquaresWith({ x: i }); }
function draw() { for (var i = 0; i < colors.length; i++) { squares[Math.floor(Math.random() * squares.length)].color = colors[i]; } for (var i = 0; i < squares.length; i++) { context.beginPath(); context.rect( squares[i].x, squares[i].y, squares[i].width, squares[i].height ); if(squares[i].color) { context.fillStyle = squares[i].color; } else { context.fillStyle = white } context.fill() context.stroke(); } }
draw()
|