【作品と詩】流るる星のごとく

【作品と詩】長るる星のごとく
  • URLをコピーしました!
ワタタク

クリエイティブコーディングと詩を組み合わせた表現。

画像と詩とコードを載せています。

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

目次

【作品と詩】流るる星のごとく

動きのある画像

重いのでXの投稿を載せています。

詩 流るる星のごとく

流るる星のごとく

君との日々は過ぎ去った

知らない街を共に歩き

美しい景色に言葉を失くし

愛し合い

空を見上げ 思い返すあの頃は

時が経てども輝いている

流るる星のごとく

君との日々は過ぎ去った

松任谷由実さんの「春よ来い」という曲の歌詞から、思い浮かんだ詩のタイトル。

好きな人と過ごしていると、一瞬で過ぎていく。

コード

// 参考にさせていただいた作品URL
// [p5.js勉強会]Flow Fieldをライブコーディング
// https://www.youtube.com/watch?v=UrgvjFTjsdg

let posYellow1 = [];  // 黄色の点1の位置
let posYellow2 = [];  // 黄色の点2の位置

function setup() {
    createCanvas(w = 500, w);  // 500x500ピクセルのキャンバスを作成
    background(252, 200, 0);  // 背景を黄色に設定

    // 黄色の点の位置を初期化
    for (let i = 0; i < 70; i++) {  // 各色の点の数を増やす
      // 黄色の点1の位置をランダムに設定
        posYellow1[i] = {x: random(w), y: random(w)};  
       // 黄色の点2の位置をランダムに設定
        posYellow2[i] = {x: random(w), y: random(w)}; 
    }
}

function draw() {
    background(252, 200, 0);  // 背景を黄色で塗りつぶす

    stroke(248, 181, 0);  // 線の色を濃い黄色に設定
    fill(248, 181, 0);  // 濃い黄色で塗りつぶす
    // 参照型の配列を使用
    for (let i = 0; i < posYellow1.length; i++) {
        drawStar(posYellow1[i].x, posYellow1[i].y, 10, 30, 5);  // 黄色の星を描く(半径を大きく)
      
        // ノイズ値に基づいて位置を更新
        let dx = noise(posYellow1[i].x / w * 15, posYellow1[i].y / w * 15, 0.1);  // ノイズに基づくxオフセット
        let dy = noise(posYellow1[i].x / w * 15, posYellow1[i].y / w * 15, 8.5);  // ノイズに基づくyオフセット
      
        posYellow1[i].x += dx;  // xオフセットをx座標に加える
        posYellow1[i].y += dy;  // yオフセットをy座標に加える
    }
    
    stroke(252, 220, 0);  // 線の色を薄い黄色に設定
    fill(252, 220, 0);  // 薄い黄色で塗りつぶす
    for (let i = 0; i < posYellow2.length; i++) {
        drawStar(posYellow2[i].x, posYellow2[i].y, 10, 30, 5);  // 薄い黄色の星を描く(半径を大きく)
      
        // ノイズ値に基づいて位置を更新
        let dx = noise(posYellow2[i].x / w * 15, posYellow2[i].y / w * 15, 0.1);  // ノイズに基づくxオフセット
        let dy = noise(posYellow2[i].x / w * 15, posYellow2[i].y / w * 15, 8.5);  // ノイズに基づくyオフセット
      
        posYellow2[i].x += dx;  // xオフセットをx座標に加える
        posYellow2[i].y += dy;  // yオフセットをy座標に加える
    }
}

// 星を描く関数
function drawStar(x, y, radius1, radius2, npoints) {
    let angle = TWO_PI / npoints;
    let halfAngle = angle / 2.0;
    beginShape();
    for (let a = 0; a < TWO_PI; a += angle) {
        let sx = x + cos(a) * radius2;
        let sy = y + sin(a) * radius2;
        vertex(sx, sy);
        sx = x + cos(a + halfAngle) * radius1;
        sy = y + sin(a + halfAngle) * radius1;
        vertex(sx, sy);
    }
    endShape(CLOSE);
}

挑戦して良かったこと

  • 作った作品から詩を書いてみたかったので、試せて良かった
  • 星の部分のコードを時間をかけて何をしているのか理解することができた
  • 星は内側と外側に頂点があるという視点
  • 呼び出し元と呼び出しの部分の理解が進む。紙に印刷しマーカーで色分けをすることで、分かりやすくなった。印刷するメリットでもある
  • 角度に関することは、ラジアンで考える
  • コードを印刷して貼るときは、100均一の無地のルーズリーフに貼るようになった。方眼用紙を少し節約できる
  • A5コピー紙→ルーズリーフの穴をあける→ちょっと切る→B5のルーズリーフバインダーにいれることができると気づく

反省点

以下の部分の理解に頭を使い、次の勉強に行くまでに時間がかかった。

// 星を描く関数
function drawStar(x, y, radius1, radius2, npoints) {
    let angle = TWO_PI / npoints;
    let halfAngle = angle / 2.0;
    beginShape();
    for (let a = 0; a < TWO_PI; a += angle) {
        let sx = x + cos(a) * radius2;
        let sy = y + sin(a) * radius2;
        vertex(sx, sy);
        sx = x + cos(a + halfAngle) * radius1;
        sy = y + sin(a + halfAngle) * radius1;
        vertex(sx, sy);
    }
    endShape(CLOSE);
}

次にやること

1つ1つの作品を「何に活かせるか」「どう応用するか」などしっかり考えながらつくり、考える力もつけていく。

ワタタク

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

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