module.exports = function MarcinLines(area, startx, starty, width, height, style) { var margins = 0 var niceBlue = '#27D1E7' var paleYellow = 'rgb(255, 255, 240)' var colorHSL = chroma.hex(niceBlue).hsl() var h = Math.random() * 255 niceBlue = chroma.hsl(h, 0.68, colorHSL[2]).hex() area.fill(niceBlue).rect(margins, margins, area.canvas.width - 2 * margins, area.canvas.height - 2 * margins) var step = area.canvas.width/30 + area.canvas.width/15 * Math.random() for(var i=0; i<2000; i+=step) { var a = { x : 0, y : area.canvas.width/30 + i } var b = { x : area.canvas.width/30 + i, y : 0 } area.save() area.stroke('#FFFFFF').line(a.x, a.y, b.x, b.y).stroke(false) var k = Math.random() area.fill('#FFFFFF') .translate(a.x + (b.x - a.x) * k + 1, a.y + (b.y - a.y) * k + 1) .rotate(-45) .rect(0, 0, area.canvas.width/30 + Math.random() * 400, area.canvas.width/100) area.restore() } style.mainColor = chroma.hsl(h, 0.5, 0.25).hex() style.fillColor = niceBlue }
hues.forEach(h => { const c = chroma.hsl(h, sat, lte) const key = keyword(c) colors.push({ key, value: createShades('' + c.hex()) }) })
module.exports = function Hexagons (area, width, height, style) { var numberOfSides = 6 var outerSize = 25 + Math.round(Math.random() * 25) var innerSize = outerSize / 2 var rows = Math.round(height / outerSize) var cols = Math.round(width / outerSize) var hue = Math.round(128 + (-128 + Math.random() * 256)) // var color = // console.log('hue: ' + hue) area.fillStyle = 'hsl(' + hue + ', 60%, 60%)' area.fillRect(0, 0, width, height) area.fill() style.mainColor = chroma.hsl(hue, 0.5, 0.25).hex() style.fillColor = 'hsl(' + hue + ', 60%, 60%)' var colorMatrix = coloursArray(numberOfSides) for (var y = 0; y < rows; y++) { for (var x = 0; x < cols; x++) { drawHexagons(area, numberOfSides, x, y, false, true, outerSize, innerSize, rows, cols, colorMatrix, hue, style) } } }
module.exports = function FractalTreeDecentred (area, startx, starty, width, height, pageCount, style) { var minPageCount = 10 var maxPageCount = 500 var minBranch = 12 var maxBranch = 18 var hue = 10 + Math.random() * 100 var margins = 0 var niceBlue = '#27D1E7' var paleYellow = 'rgb(255, 255, 240)' var colorHSL = chroma.hex(niceBlue).hsl() var color = chroma.hsl(hue, 0.8, 0.2).hex() var lightColor = chroma.hsl(hue, 0.5, colorHSL[2] * 1.2).hex() area.fill(lightColor).rect(margins, margins, area.canvas.width - 2 * margins, area.canvas.height - 2 * margins) area.fill(false).stroke('rgba(255, 255, 255, 0.15)', 3) var buds = [] area.save() // mapping page number to BranchMaxLevel if (pageCount < minPageCount) { pageCount = minPageCount } if (pageCount > maxPageCount) { pageCount = maxPageCount } var branchMaxLevel = Math.round(utils.remap(pageCount, minPageCount, maxPageCount, minBranch, maxBranch)) // 17 var branchSchrink = 0.95 var branchAngle = 15 + Math.random() * 15 var branchInitLen = area.canvas.width * (0.09 + Math.random() * 0.07) var branchStartX = 218 // var branchInitLen = 200 //area.canvas.width * (pageCount/250 + Math.random() * 0.08) // var branchStartX = 200 //area.canvas.width * (0.3 + 0.5 * Math.random()) var branchingChance = 0.75 + Math.random() * 0.2 function grow () { if (buds.length == 0) { return } var bud = buds.shift() var nx = bud.x + bud.len * Math.cos(bud.dir / 180 * Math.PI) var ny = bud.y + bud.len * Math.sin(bud.dir / 180 * Math.PI) area.line(bud.x, bud.y, nx, ny) if (bud.level >= branchMaxLevel) { return // die } var chance = Math.random() if (chance < 0.25) { // go forward the same way bud.length *= branchSchrink buds.push({ x: nx, y: ny, dir: bud.dir, len: bud.len * branchSchrink, level: bud.level + 1 }) } else if (chance < branchingChance || bud.level <= 2) { // split buds.push({ x: nx, y: ny, dir: bud.dir - branchAngle, len: bud.len * branchSchrink, level: bud.level + 1 }) buds.push({ x: nx, y: ny, dir: bud.dir + branchAngle, len: bud.len * branchSchrink * branchSchrink, level: bud.level + 1 }) } else { // do nothing / die } grow() } buds.push({ x: branchStartX, y: area.canvas.height, dir: -90, len: branchInitLen, level: 0 }) grow() while (buds.length > 0) { grow() } area.fill(false).stroke('#333333', 1) // branchAngle = 15 + Math.random() * 15 // branchInitLen = area.canvas.width * (0.09 + Math.random() * 0.07) branchStartX += 10 buds.push({ x: branchStartX, y: area.canvas.height, dir: -90, len: branchInitLen, level: 0 }) grow() area.restore() area.stroke(false) var stack = [] style.mainColor = chroma.hsl(hue, 0.8, 0.2).hex()// console.log('parent colour: ' + document.getElementById('child_colour').value) //= chroma.hsl(hue, 0.4, 0.4).hex() style.fillColor = lightColor }
module.exports = function MarcinTilesControl (area, startx, starty, width, height, min_tile, max_tile, style) { var margins = 0 var borderScale = 1 + Math.random() var hue = Math.random() * 360 var numX = 2 + Math.floor(Math.random() * 10) var radius = (0.2 + 0.5 * Math.random()) var radius2 = (0.1 + 0.4 * Math.random()) var shape = Math.floor(Math.random() * 2) var niceBlue = '#27D1E7' var paleYellow = 'rgb(255, 255, 255)' var colorHSL = chroma.hex(niceBlue).hsl() var color = chroma.hsl(hue, 0.8, colorHSL[2]).hex() var lightColor = chroma.hsl(hue, 0.8, colorHSL[2] * 1.5).hex() area.fill(color).rect(startx, starty, width, height) // minimal 32, maximal 128 - for semi-opaque layout // minimal 24, maximal 64 for cornered layout var stepX = min_tile + Math.round(Math.random() * (max_tile - min_tile)) var stepY = stepX // stepX var r = stepX * radius var r2 = stepX * radius2 r2 *= 0.25 // square // if (shape == 1) r2 *= 0.25 //ellipse area.fill(lightColor).stroke(false) for (var x = 0; x <= area.canvas.width + stepX / 2; x += stepX) { for (var y = 0; y <= area.canvas.height + stepY / 2; y += stepY) { area.save() area.translate(x, y) area.rotate(-45) area.scale(borderScale, borderScale) area.rect(-r, -r2, r * 2, r2 * 2) // if (shape == 1) area.ellipse(-r, -r2, r*2, r2*2) area.rotate(90) area.rect(-r, -r2, r * 2, r2 * 2) // if (shape == 1) area.ellipse(-r, -r2, r*2, r2*2) area.restore() } style.mainColor = chroma.hsl(hue, 0.5, 0.25).hex() style.fillColor = color } area.fill(color).stroke(false) for (var x = 0; x <= area.canvas.width + stepX / 2; x += stepX) { for (var y = 0; y <= area.canvas.height + stepY / 2; y += stepY) { area.save() area.translate(x, y) area.rotate(-45) // area.rect(-r, -r2, r*2, r2*2) area.ellipse(-r, -r2, r * 2, r2 * 2) area.rotate(90) // area.rect(-r, -r2, r*2, r2*2) area.ellipse(-r, -r2, r * 2, r2 * 2) area.restore() } } }
const desat = n => hex => { const [ h, s, l ] = chroma(hex).hsl() return chroma.hsl(h, n, l).hex() }