前回、前々回は以下を参照ください。
1/fゆらぎ その1:http://tryoutartprogramming.blogspot.jp/2015/10/1f-1.html
1/fゆらぎ その2:http://tryoutartprogramming.blogspot.jp/2015/10/1f-2.html
と、いうワケでようやく作っていこうかと思います。
その1の最後にも書きましたが、とりあえずJavaに慣れているから、今回は手っ取り早くProcessing(2.1.1)を使ってみます。
1. 素直に実装してみる
まずは前回の数式を素直に実装してみようかと思います。ソースコード
float x = 0.1f; void setup() { size(200, 200); background(0, 0, 0); frameRate(20); } void draw() { fill(0, 0, 0); rect(0,0,width, height); if(x < 0.5f) { x = x+2.0f*x*x; } else if(x >= 0.5f) { x = x-2.0f*(1.0f-x)*(1.0f-x); } fill(255, 36, 0, (255*x)); rect(0,0,width, height); }
実行結果
![]() |
実行結果 |
おぉっ。
これだけでも何かそれっぽい。
でもどこかで見たけれど、確かに上端と下端に貼りつきやすい気がする。
この実行結果の例の場合は黒(下端)にちょっとより過ぎているような。。。
と、いう事でどこかのパクりではありますが、解決策を入れてみようかと思います。
2. 改良版
対策としては単純に上端および下端に近い値になった時、乱数で適当な値に変更してしまいます。あと、炎を再現するとなると、真っ暗になるのもあれなので、ちょっとゲタ履かせます。
ソースコード
float x = 0.1f; void setup() { size(200, 200); background(0, 0, 0, 255); frameRate(20); } void draw() { fill(20, 10, 0); rect(0, 0, width, height); if(x < 0.5f) { x = x+2.0f*x*x; } else if(x >= 0.5f) { x = x-2.0f*(1.0f-x)*(1.0f-x); } if((x < 0.005) || (x > 0.995)) { x = random(1.0); } x = x * 0.7 + 0.3f; fill(255, 36, 0, (255*x)); rect(0, 0, width, height); }
実行結果
![]() |
実行結果 |
おぉっいいね。いい感じ。
形はまったく炎っぽくないけど、色の変化のゆらゆら感はなかなかではないだろうか。
と、いうわけで、3回に渡って1/fゆらぎの実装をしてみましたが、丸や四角なんかよりも、もっと地味な結果になりました。3回にも渡ってやるほどのものか?と言われちゃいそうですが、なんとなくそれっぽい感じのモノがとりあえず出来たので、個人的には満足です。最初だし。
これをスマホで表示して、かぼちゃの中に放り込めばジャックオーランタンが出来上がるかも?
0 件のコメント:
コメントを投稿