Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

【週刊p5js】work21

f:id:taiga006:20200809202409j:plain

function p5Creature(count, step, scale, offset) {
    for(let i = 0; i < count; i += step) {
        for(let j = 0; j < count; j += step) {
            let n = noise(i * scale, j * scale);
            let m = noise(j * scale, i * scale);
            let x = round(map(n, 0, 1, -offset, offset));
            let y = round(map(m, 0, 1, -offset, offset));

            let w = map(sin(i), -1, 1, .4, 1.96);
            strokeWeight(w);
            let len = map(n+m, 0, 2, 10, 250);
            stroke(16, len);
            point(x, y);
        }
    }
}

function setup() {
    createCanvas(900, 900);
    background(4, 6, 8);
    blendMode(ADD);
    noFill();

    noiseDetail(3);

    let cx = width/2;
    let cy = height/2;

    push();
    translate(cx + 50, cy + 50);
    p5Creature(1000, 1, 0.2, 1000);
    pop();

    noiseDetail(10);

    push();
    translate(cx, cy);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 400);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 400);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 400);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 600);
    noiseSeed(int(random(1000)));
    p5Creature(250, 1, 0.002, 800);
    pop();

    ellipseMode(CENTER);
    
    stroke(250, 252, 255, 90);
    strokeWeight(1.2);
    for(let i = 1; i < 4; i++) {
        noFill();
        rect(60, 20*i, 350, 15);
        fill(250, 90);
        rect(60, 20*i, random(100, 250), 15);
    }

    fill(250, 90);
    let vx, vy;
    let t = 200;

    vx = random(t);
    vy = random(t);
    line(100, 100, cx-vx, cy-vy);
    circle(cx-vx, cy-vy, 20, 20);

    vx = random(t);
    vy = random(t);
    line(100, 750, cx-vx, cy+vy);
    circle(cx-vx, cy+vy, 20, 20);
    textSize(16);
    let bnc = random(30, 60);
    let llv = random(140, 520);
    let ktc = random(-400, 600);
    text("BNC : " + bnc.toFixed(5), 40, 780);
    text("LLV(N) :  " + llv.toFixed(5), 40, 810);
    text("LLV(S) :  " + ktc.toFixed(5), 40, 840);

    vx = random(t);
    vy = random(t);
    line(730, 120, cx+vx, cy-vy);
    circle(cx+vx, cy-vy, 20, 20);

    vx = random(t);
    vy = random(t); 
    line(750, 150, cx+vx, cy+vy);
    circle(cx+vx, cy+vy, 20, 20);

    strokeCap(SQUARE);
    rectMode(CENTER);
    noStroke();
    push();
    translate(0, cy);
    rotate(PI/4);
    rect(0, 0, 60, 60);
    pop();

    push();
    translate(width, cy);
    rotate(PI/4);
    rect(0, 0, 60, 60);
    pop();

    stroke(150, 30);

    strokeWeight(16.0);
    noFill();
    circle(width-90 , 90, 80, 80);

    let g = 0;
    for(let i = 0; i < 6; i++) {
        push();
        translate(width-90 , 90);
        g += random(PI/2);
        arc(0, 0, 90, 90, -PI/2, g);
        pop();
    }

    noFill();
    stroke(150, 90);
    strokeWeight(16.0);

    let start1 = random(-PI, 0);
    let end1 = random(0, PI);
    arc(cx, cy, 340, 340, start1, end1);

    let start2 = random(0, PI);
    let end2 = random(PI, 2*PI);
    arc(cx, cy, 640, 640, start2, end2);

    let start3 = random(-HALF_PI, HALF_PI);
    let end3 = random(HALF_PI, HALF_PI+PI);
    arc(cx, cy, 700, 700, start3, end3);

    stroke(250, 252, 255, 80);
    strokeWeight(4.0);
    push();
    drawingContext.shadowBlur = 30;
    drawingContext.shadowColor = color(95, 138, 217);
    pop();

    let v = PI /10;
    let ra = [150, 250, 300, 480, 580];
    push();
    for(let i = 0; i < 5; i++) {
        let a = random(18, 12);
        strokeWeight(2.0);
        drawingContext.setLineDash([a, a/2, a/3, a/2]);
        arc(cx, cy, ra[i], ra[i],   -QUARTER_PI+v,    QUARTER_PI-v);
        arc(cx, cy, ra[i], ra[i], PI-QUARTER_PI+v, PI+QUARTER_PI-v);
    }
    let buff = 200;
    strokeWeight(.8);
    line(cx, buff, cx, height-buff);
    line(buff, cy, width-buff, cy);
    pop();

    push();
    for(let i = 0; i < 3; i++) {
        drawingContext.setLineDash([random(i, i *3), random(i*3 , i *5)]);
        circle(cx, cy, 720 + i * 20);
    }
    push();

    noLoop();
}

function draw() {
    // do nothing
}

今週の作品メモ

📌 Instagramで相互フォローの gengeomergence さんの作品が好きで、よくよくDescriptionを読んだら「レポジトリにソースコード置いてるぜ!」ってなったので早速観察。ProcessingのPythonモードで書かれていたので、今回はその数ある素敵な作品のうちの一つ"SeaCreature"をp5jsに書き換えて遊んでみました。

github.com

📌 少し前に、「SciFi系のUIをジェネラティブに作ろうぜ!」みたいなmediumあたりに書かれた英語の記事をみたんだけど、どれだっけかな。それにもちょっと触発されています。今回は事前にスケッチなどせず、思うがままに要素を追加していった結果、ソースコードもだいぶシッチャカメッチャカですが、ちょっとこれ整理して極めたいですね。面白そう。

今週の雑談

📌 Podcast番組をはじめてだいたい1年くらい経ちました。
そのことについてのブログを書きました。

taiga.hatenadiary.com

📌 7月の頭にebayで購入したオールドレンズがついに到着しました。Helios 44-2 58mmというオールドレンズの入門としては定番のレンズらしいです。sonyのa5100(APS-Cセンサー)しか手元にないので、いざ構えると80mmくらいの望遠レンズになっちゃいます。この焦点距離が素人には難しいんですが、まあ、カメラは長い趣味としてやっていけたらいいなと思っているので焦らずに遊んでいければいいなとおもっています。Flickrとかに写真まとめていきたいな。

📌 最近、読んだ本の感想をInstagramに載せはじめました。おうち時間が当たり前になってきて、一番自分の中で起きた変化は読書量かもしれません。こちらもゆるーく継続できたらいいなと思っています。

www.instagram.com

(こんな感じ。) f:id:taiga006:20200809220209p:plain:w400

今週のラジオ

📌 やー、絵文字って難しいよね😜