【p5.js】同心多角形を描く【作品No.12-14】

  • URLをコピーしました!
ワタタク

同心多角形の作品をつくりました。

コード、補足情報、コード内に参考にしたページのURL、良かったこと、反省点、次にどうするかをまとめています。

この記事を書いた人
ワタタク
  • クリエイティブコーディング上達関連情報と、その過程の記録を発信中
  • コンセプトは「クリエイティブコーディング1万時間の歩き方」
  • 2024年にProcessingの基礎学習のアウトプットを終え、2025年から作品制作開始

目次

同心多角形の作品の画像とコード3つ

【作品No.12】中心から同心多角形を描く

【作品No.12】中心から同心多角形を描く
// 参考にさせていただいたページとURL
// [p5.js勉強会]同心円をライブコーディング
// https://www.youtube.com/watch?v=E_1E3p6KeNo

let colors = ["#780000","#c1121f","#fdf0d5","#003049","#669bbc"]; // 色の配列
let numSides = 8; // 多角形の辺の数

function setup() {
  createCanvas(w=720, w); // キャンバスのサイズを設定(幅と高さを720に)
  colorMode(HSB); // 色モードをHSBに設定(色相、彩度、輝度)
  background(100); // 背景色を設定(100%輝度のグレースケール)

  noFill(); // 塗りつぶしをなしに設定(形の内部を塗らない)

  translate(w/2, w/2); // キャンバスの中央に座標系を移動

  let c_size = 0; // 多角形のサイズを初期化
  while (c_size < 500) { // 最大サイズ(500)になるまで繰り返す
    drawPolygon(0, 0, c_size, numSides); // 多角形を描画(中心を0,0、サイズをc_size、辺の数をnumSidesに設定)
    stroke(random(colors)); // 線の色を設定(colors配列からランダムに選ぶ)
    c_size += 10; // サイズを10ずつ増加
  }
}

function drawPolygon(x, y, radius, npoints) {
  let angle = TWO_PI / npoints; // 各頂点間の角度を計算(2πをnpointsで割る)
  beginShape(); // 多角形の描画を開始
  for (let a = 0; a < TWO_PI; a += angle) { // 0から2πまでangleごとに繰り返す
    let sx = x + cos(a) * radius; // x座標を計算(cos(a) * 半径)
    let sy = y + sin(a) * radius; // y座標を計算(sin(a) * 半径)
    vertex(sx, sy); // 頂点を設定
  }
  endShape(CLOSE); // 多角形の描画を終了し、形を閉じる
}

【作品No.13】様々な位置にさまざまな同心多角形を描く

傘みたいに見えるね。

【作品No.13】様々な位置にさまざまな同心多角形を描く
// 参考にさせていただいたページとURL
// [p5.js勉強会]同心円をライブコーディング
// https://www.youtube.com/watch?v=E_1E3p6KeNo

let colors = ["#780000","#c1121f","#fdf0d5","#003049","#669bbc"] // 色の配列
let numSides = 9; // 多角形の辺の数(例えば六角形)

function setup() {
  createCanvas(w=720, w); // キャンバスのサイズを設定
  colorMode(HSB); // 色モードをHSBに設定
  background(100); // 背景色を設定
  noFill(); // 塗りつぶしをなしに設定
  
  for(let i = 0; i < 10; i++){ // 10回繰り返す
    push(); // 現在の座標システムを保存
    stroke(random(colors)); // ランダムな色を選択
    translate(random(w), random(w)); // ランダムな位置に移動
    polygons_draw(random(50, 200), random(2, 20), numSides); // ランダムなサイズとステップで多角形を描画
    pop(); // 座標システムを復元
  }
}

function polygons_draw(max_size, step_size, npoints){
  let p_size = 0; // 多角形のサイズを初期化
  while(p_size < max_size){ // 最大サイズになるまで繰り返す
    let half_size = p_size / 2;
    drawPolygon(0, 0, half_size, npoints); // 多角形を描画
    p_size += step_size; // ステップサイズ分だけ増加
  }
}

function drawPolygon(x, y, radius, npoints) {
  let angle = TWO_PI / npoints; // 各頂点間の角度を計算
  beginShape(); // 多角形の描画を開始
  for (let a = 0; a < TWO_PI; a += angle) {
    let sx = x + cos(a) * radius; // x座標を計算
    let sy = y + sin(a) * radius; // y座標を計算
    vertex(sx, sy); // 頂点を設定
  }
  endShape(CLOSE); // 多角形の描画を終了し、形を閉じる
}

【作品No.14】さらに複数の同心多角形と色や線の太さなどの工夫

// 参考にさせていただいたページとURL
// [p5.js勉強会]同心円をライブコーディング
// https://www.youtube.com/watch?v=E_1E3p6KeNo

let colors = ["#780000","#c1121f","#fdf0d5","#003049","#669bbc"] // 色の配列
let numSides = 6; // 多角形の辺の数(例えば六角形)

function setup() {
  createCanvas(w=720, w); // キャンバスのサイズを設定
  colorMode(HSB); // 色モードをHSBに設定
  background(random(colors)); // 背景色をランダムな色に設定
  noFill(); // 塗りつぶしをなしに設定
  
  for(let i = 0; i < 10; i++){ // 10回繰り返す
    push(); // 現在の座標システムを保存
    translate(random(-150, w + 150), random(-150, w + 150)); // ランダムな位置に移動
    polygons_draw(random(50, 450), random(3, 30), numSides); // ランダムなサイズとステップで多角形を描画
    pop(); // 座標システムを復元
  }
}

function polygons_draw(max_size, step_size, npoints){
  let c_size = 0; // 多角形のサイズを初期化
  while(c_size < max_size){ // 最大サイズになるまで繰り返す
    strokeWeight(random(2, 8)); // ランダムな線の太さを設定
    stroke(random(colors)+ "D0"); // ランダムな色と透明度を設定
    drawPolygon(0, 0, c_size, npoints); // 多角形を描画
    c_size += step_size; // ステップサイズ分だけ増加
  }
}

function drawPolygon(x, y, radius, npoints) {
  let angle = TWO_PI / npoints; // 各頂点間の角度を計算
  beginShape(); // 多角形の描画を開始
  for (let a = 0; a < TWO_PI; a += angle) {
    let sx = x + cos(a) * radius; // x座標を計算
    let sy = y + sin(a) * radius; // y座標を計算
    vertex(sx, sy); // 頂点を設定
  }
  endShape(CLOSE); // 多角形の描画を終了し、形を閉じる
}

この作品をつくって良かったこと

  • 多角形は上から見た傘に見えた No,13の作品
  • 形と色を変えるとすごく印象が変わる
  • 薄い色があると、透明になっているように見えて、空白になったようにも感じる。ちょっと空白がほしいなとか思うときは、透明度の調整
  • 色もすぐに決めれるようになった
  • 角の数を20にしたら、回っているコマみたいに見えた。回転しているもののブレている様子や、動きを表現したいときに多角形は使えそうだ

反省点

  • 色をもう少しちゃんと選べばよかった
  • 角をもっといろいろ試せばよかった

次はどうするか?

  • 同心円を目標としていたところまでやりきったので、今までやってきた表現と組み合わせた作品をつくってみる

創造って組み合わせ。みたいな名言を知ったので、この前やったFlow Fieldと同心円を組み合わせることに挑戦してみます。

どんなのができるのか、ドキドキです。

ワタタク

それでは今日もレッツワクワクコーディング。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次