プログラムでオラフを描いてみた

次はオラフをプログラミングコードで描いてみました。
(リトルグリーンメンよりはクオリティ上がった…?)

とにかく関数を使いたい!!ということで、愚直に書いたコードです。

Processing
void setup()
{
  size(800, 800);
}

void draw()
{
  background(255);
  noStroke();
  fill(218, 219, 178);
  rect(0, 300, 800, 600);
  fill(64, 224, 208, 100);
  rect(0, 200, 800, 200);
  fill(160, 216, 239);
  rect(0, 0, 800, 200);

  fill(255, 66, 14);
  circle(700, 100, 100);

  Olaf(400, 450);
  miniOlaf(120, 650);
  miniOlaf(600, 750);
  miniOlaf(680, 550);
}

void Olaf(int x, int y)
{
  stroke(0);
  strokeWeight(9);
  fill(255);
  ellipse(x, y, 390, 600);
  arc(x-20, y-200, 190, 100, radians(180), radians(270));
  arc(x+20, y-200, 190, 100, radians(270), radians(360));
  circle(x-54, y-170, 100);
  circle(x+54, y-170, 100);
  fill(137, 172, 215);
  arc(x, y-40, 280, 500, radians(0), radians(180));
  fill(255);
  quad(x-50, y, x+50, y, x+40, y+50, x-40, y+50);
  fill(255);
  arc(x, y-90, 320, 200, radians(0), radians(180));
  fill(0);
  circle(x-50, y-160, 40);
  circle(x+50, y-170, 40);
  strokeWeight(6);
  stroke(178, 113, 0);
  fill(255, 165, 0);
  triangle(x, y-140, x-100, y-90, x+30, y-80);
  stroke(0);
  strokeWeight(9);
  noFill();
  arc(x-70, y-300, 140, 250, radians(270), radians(360));
  arc(x+90, y-300, 140, 180, radians(180), radians(270));
  arc(x-90, y-300, 140, 140, radians(270), radians(360));
  arc(x-63, y-280, 130, 130, radians(240), radians(300));
}

void miniOlaf(int x, int y)
{
  stroke(0);
  strokeWeight(5);
  fill(255);
  ellipse(x, y+70, 80, 80);
  ellipse(x, y, 100, 100);
  ellipse(x-28, y+100, 40, 40);
  ellipse(x+28, y+100, 40, 40);
  fill(0);
  ellipse(x-20, y-15, 20, 20);
  ellipse(x+20, y-15, 20, 20);
  noFill();
  arc(x, y+10, 30, 30, radians(0), radians(180));
}