#Codevember day03: Carrot
人参みたいなかわいいお題,いけるんかなとおもったけどいけた.過去に書いた根茎図のプログラムがつかえるなーと思ってp5.jsに転用した.
//modify from my past sketch in p5. //http://takawo.hatenablog.com/entry/2017/12/30/152858 let len = 55; let font; function preload() { font = loadFont("Lato-Italic.ttf"); } function setup() { createCanvas(400, 400); colorMode(HSB, 360, 100, 100, 100); angleMode(DEGREES); noLoop(); } function draw() { let f = frameCount; background(220); push(); translate(width * 1 / 2 - 20, height * 1 / 2 - 20); rotate(45); tree(floor(random(3, 6)), 100); pop(); noStroke(); push(); translate(width / 4, height * 2 / 3); rotate(45); fill(30, 80, 100); beginShape(); for (let i = 0; i < 360; i++) { let x = cos(i - 90) * 80 * noise((f * 100 + i) * 0.008); let y = sin(i - 90) * 120; vertex(x, y); } endShape(CLOSE); fill(0, 0, 100, 20); beginShape(); for (let i = 0; i < 360; i++) { let x = cos(i - 90) * 70 * noise((f * 100 + i) * 0.18); let y = sin(i - 90) * 100; vertex(x, y); } endShape(CLOSE); pop(); textSize(30); fill(0, 0, 0); noStroke(); text("Codevember #day03\nCarrot", 20, 40); } function mousePressed() { redraw(); } function tree(depth, l) { if (depth > 0) { let n = floor(random(3, 10)); for (let angle = 180; angle < 360; angle += random(30, 60)) { push(); rotate(angle); stroke(120, random(50, 80), random(80, 100), 100); noFill(); let sw = map(l, 0, len, 0, 3); strokeWeight(sw); if (random(100) < 50) { bezier(0, 0, l / 2, l / 2, l / 2, -l / 2, l, 0); } else { bezier(0, 0, l / 2, -l / 2, l / 2, l / 2, l, 0); } //line(0, 0, l, 0); noStroke(); fill(120, 80, 100, 100); let d = map(l, 0, len, 0, 5); ellipse(l, 0, d, d); translate(l, 0); rotate(360 / n / 2); if (l > 15) { tree(depth - 1, l * 0.45); } pop(); } } }