今日のp5.rbでのコーディングあそび
基本の設定をp5.rbで書いていきます。
def setup
#カンバスサイズの設定
createCanvas(600, 600)
#カラーモードの指定(HSB推奨)
colorMode(HSB, 360, 100, 100, 100)
#角度を弧度法から度数法に指定
angleMode(DEGREES)
#背景色を指定
background(0, 0, 90)
end
HSB
>Hue(色相)、Saturation(彩度)、 Brightness(明度)
これを推奨するのはなんでなんだろうな。そうか、計算しやすいか。
弧度法、度数法
https://www.nhk.or.jp/kokokoza/r2_math2/assets/memo/memo_0000001382.pdf
数学ろくにやってない(そういう高校のカリキュラムだっった)のでちょびちょび知るしかない。
画面の中央に図形を配置する(円,四角形)もやってみよう。
>変数:名前をつけられる「箱」のようなもの.数値や文字,色などの値を格納できる,
そう。変数は箱だよ箱。そのメタファーでわたしも生きてきました。
def setup
#カンバスサイズの設定
createCanvas(600, 600)
#カラーモードの指定(HSB推奨)
colorMode(HSB, 360, 100, 100, 100)
#角度を弧度法から度数法に指定
angleMode(DEGREES)
#背景色を指定
background(0, 0, 90)
#図形描画に関わる変数(x,y,大きさ)
cx = width / 2;
cy = height / 2;
d = 300;
#a-四角形の描画
rectMode(CENTER)
noStroke()
fill(0, 0, 20)
rect(cx, cy, d, d)
#//b-円の描画
#noStroke();
#fill(0, 0, 20);
#ellipse(cx, cy, d, d);
end
def setup
#カンバスサイズの設定
createCanvas(600, 600)
#カラーモードの指定(HSB推奨)
colorMode(HSB, 360, 100, 100, 100)
#角度を弧度法から度数法に指定
angleMode(DEGREES)
#背景色を指定
background(0, 0, 90)
#図形描画に関わる変数(x,y,大きさ)
cx = width / 2;
cy = height / 2;
d = 300;
#a-四角形の描画
#rectMode(CENTER)
#noStroke()
#fill(0, 0, 20)
#rect(cx, cy, d, d)
#b-円の描画
noStroke()
fill(0, 0, 20)
ellipse(cx, cy, d, d)
end
粒状感のある背景もいってみましょう。
def setup
w = 600
h = 600
#カンバスサイズの設定
createCanvas(w, h)
#カラーモードの指定(HSB推奨)
colorMode(HSB, 360, 100, 100, 100)
#角度を弧度法から度数法に指定
angleMode(DEGREES)
#背景色を指定
background(0, 0, 90)
#画面上にたくさんの点を打つことで粒状感を背景に加える
#点の密度,個数はカンバスのサイズに対して何%打つかを考えてみる
#loop_num = (width * height * 5 / 100) <= Fatal Errorが起きる!
loop_num = (w * h * 5 / 100)
loop_num.times do
#半透明の点,白でも黒でもOK.透明度は適宜調整する
strokeWeight(1)
stroke(100, 0, 0, 50)
px = random(w)
py = random(h)
point(px, py)
end
#図形描画に関わる変数(x,y,大きさ)
cx = width / 2;
cy = height / 2;
d = 300;
#a-四角形の描画
#rectMode(CENTER)
#noStroke()
#fill(0, 0, 20)
#rect(cx, cy, d, d)
#b-円の描画
noStroke()
fill(0, 0, 20)
ellipse(cx, cy, d, d)
end
なるほど、座標をランダムにとってびゃーーー!!っとうっていくわけか。その密度は幅と高さをかけて、そこにさらに係数をかけて、それを100で割って%にするのか。
>loop_num = (width * height * 5 / 100) <= Fatal Errorが起きる!
Uncaught Error: Ruby Fatal Error: Ruby APIs that may rewind the VM stack are prohibited under nested VM operation (rb_wasm_handle_jmp_unwind)
Nested VM operation means that the call stack has sandwitched JS frames like JS -> Ruby -> JS -> Ruby caused by something like `window.rubyVM.eval("JS.global[:rubyVM].eval('Fiber.yield')")`
Please check your call stack and make sure that you are **not** doing any of the following inside the nested Ruby frame:
1. Switching fibers (e.g. Fiber#resume, Fiber.yield, and Fiber#transfer)
Note that `evalAsync` JS API switches fibers internally
2. Raising uncaught exceptions
Please catch all exceptions inside the nested operation
3. Calling Continuation APIs
at rb_wasm_throw_prohibit_rewind_exception (browser.umd.js:2712:25)
at 0386a736:0xea40
at 0386a736:0xf224
at RbAbiGuest.rbFuncallvProtect (browser.umd.js:2214:169)
at exports.<computed> [as rbFuncallvProtect] (browser.umd.js:2643:54)
at browser.umd.js:3148:44
at wrapRbOperation (browser.umd.js:3126:18)
at callRbMethod (browser.umd.js:3147:14)
at RbValue.call (browser.umd.js:3004:30)
at p5.setup (browser.umd.js:2778:31)
まだメカニズムわからず。
この記事が気に入ったらサポートをしてみませんか?