【Fork No.01】reona396様のLines

【Fork No.01】reona396様のLines
  • URLをコピーしました!

reona396様のLines(https://openprocessing.org/sketch/918484)をForkさせていただき、作成した記事です。

この記事の広告は表示されないように設定しております。

この記事を書いた人

ワタタク(Watataku)
  • クリエイティブコーダー / アーティスト
  • 「人の心に寄り添う、機能するアート」を探究しています
  • アートとテクノロジーが、社会や個人のウェルビーイングにどう貢献できるかに、関心があります

目次

reona396様のLinesをForkさせていただき、つくった作品【画像とアニメーションとコード】

【Fork No.01】reona396様のLines

アニメーション。

// reona396様の作品 Lines のFork
// https://openprocessing.org/sketch/918484

const palette = ["#ff595e","#ffca3a","#8ac926","#1982c4","#6a4c93"];
let lines = [];
let linesNum = 60;

const DIST = 10;
let MAX;
const GEN = 40;

let stColor;

function setup() {
    createCanvas(windowWidth, windowHeight);
    angleMode(DEGREES);

    MAX = width > height ? width : height;
    stColor = "#ffca3a";

    for (let i = 0; i < linesNum; i++) {
        lines.push(new MyLine());
    }
}

function draw() {
    background(255);

    noStroke();
    for (let i = 0; i < lines.length; i++) {
        push();
        translate(width / 2, height + 10);
        rotate(360 * i / lines.length);
        lines[i].display();
        pop();
    }

    fill(255);
    stroke(stColor);
    strokeWeight(15);
    circle(width / 2, height + 10, MAX * 0.5);
}

class MyLine {
    constructor() {
        this.objs = [];
        this.speed = random(5, 10);
        this.h = random(10, 20);
    }

    display() {
        if (random(100) < GEN) {
            if ((this.objs.length == 0) ||
                (this.objs.length > 0 && this.objs[this.objs.length - 1].hasDistance())) {
                this.objs.push(new Obj(this.speed, this.h));
            }
        }

        for (let i = 0; i < this.objs.length; i++) {
            this.objs[i].move();
            this.objs[i].display();
        }

        if (this.objs.length > 0) {
            for (let j = this.objs.length - 1; j >= 0; j--) {
                if (this.objs[j].isFinished()) {
                    this.objs.splice(j, 1);
                }
            }
        }
    }
}

class Obj {
    constructor(tmpSpeed, tmpH) {
        this.x = 0;
        this.y = 0;
        this.speed = tmpSpeed;
        this.w = random(20, 100);
        this.h = tmpH;
        this.c = color(random(palette));
    }

    move() {
        this.x -= this.speed;
    }

    isFinished() {
        if (this.x < -MAX * 1 - this.w) {
            return true;
        } else {
            return false;
        }
    }

    hasDistance() {
        if (this.x < -(this.w + DIST)) {
            return true;
        } else {
            return false;
        }
    }

    display() {
        fill(this.c);
        rect(this.x, this.y, this.w, this.h, this.h / 2);
    }
}

作った感想

reona396様のクリエイティブコーディングに関しての書籍を読み、ご本人のOpenProcessingの作品を見てForkしたいと思った作品。

本からもかなり学ばさせていただきました。

時間をかけ、コードの構成などを分析しつつ、僕なりに変えてみました。

「クラスの中から新しいクラスをつくることができるんだ!」

MAX = width > height ? width : height;のような三項演算子を使った書き方もできるんだ!」

と思いながら、じっくり分析し、自分なりの表現にしてみました。

つくった作品数もまだ25個くらいで、クラスを使った表現にも慣れていないので分析は大変でしたが、自分なりのイメージに変更できて嬉しかったです。

まだまだコーディングに慣れていないので、たくさん見て、写経して、今回ForkさせていただきたLinesのようなコーディングができるように頑張ります。

ワタタク

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

ワタタク(Watataku)
クリエイティブコーダー/アーティスト
AIと共に、「人の心に寄り添う、機能するアート」を探究しています。

ここは、その思索と創造の全記録を記す、思考の実験室(アトリエ)です。

僕の創作の源泉は、人生経験そのものです。
不当な出来事や、精神的な支配の中で、私の心は何度も粉々に砕け散りました。しかし、その一つ一つの破片をどのようにすれば鮮やかな絵の具にできるかを考え、ゆっくり心のパレットに色を整えていきました。その、長い、長い、自身との対話の果てに「人の役に立つアートを作りたい」という考え方にたどり着きました。

かつて、僕の武器は、アコースティックギター弾き語りと、カメラでした。
オリジナルソングの演奏でお客様投票1位となった「物語の力」。
世界20カ国の旅で培った、多様な「視点」。

今、僕は、それら全ての経験を、「コード」という、新しい言語で、世界に問いかけています。

このブログでは、作品の制作過程や、日々の発見、そして、僕自身の上達の軌跡を記録していきます。

僕の旅が、あなたの日常を、ほんの少しでも豊かにするための、光になることを願って。

クリエイティブコーディングロード運営者 ワタタク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次