読者です 読者をやめる 読者になる 読者になる

ラズパイ3倍美味しいブログ

ラズパイ3を美味しく食べます

可愛いハートをいろんなサイズで好き勝手に敷き詰める

Processingで自分の想像通りに何かを作り上げるのは楽しい。

色々な関数を覚えていくのは、魔法の言葉を覚えていくようだな、ってまさに思う。魔法学校の生徒も、こんな風に魔法の言葉を覚えていって、魔法の言葉を使いこなせる生徒はどんどん上級魔法を使っていけるようになるんだろう。なんかそんなことをイメージしてしまう。


そんなわけでProcessingのrandom()の魔法は面白い。ハートを出せる魔法を学んだのでバンバン撃ってる。前回に続いて、ランダムにハートを敷き詰めてみたい。位置は別に揃ってなくてもいいや。画面の大きさは私の所持携帯iPhoneSEの画面サイズにする。横640ピクセル☓縦1136ピクセルね。

 

ハート形の描写は前回の記事と同様、下記のサイトを参考にしている。

Proce55ing.walker,blog » Blog Archive » Processingで五角形・六角形・ハート形を描く

作ってみたぞー
random_heart_funcy.pde
----------------------------------------------
void setup(){
size(640, 1136);
background(#E0B5C9);
noStroke();
randomSeed(5);
for(int i=0;i<500;i++){
float hx = random(width);
float hy = random(0,height);
float h = random(20,100);
println(hx);
fill(random(210,255),random(0,100),random(0,100),random(50,100));
heart(hx, hy, h,h);
}
}

void draw(){}

// ハート形の描画
void heart(float centerX, float centerY, float width, float height){
final float WIDTH = width / 2 * 0.85;
final float HEIGHT = height / 2;
final float OFFSET = centerY - (HEIGHT / 6 * 5);
beginShape();
for(int i = 0; i < 30; i++){
float tx = abs(sin(radians(i * 12))) * (1 + cos(radians(i * 12))) * sin(radians(i * 12)) * WIDTH + centerX;
float ty = (0.8 + cos(radians(i * 12))) * cos(radians(i * 12)) * HEIGHT + OFFSET;
vertex(tx, ty);
}
endShape(CLOSE);
}

void keyPressed(){
if(keyCode==ENTER){
save("random_heart_funcy.png");
}
}
----------------------------------------------

f:id:umesyurock0603:20170212093847p:plain

ハートがファンシーになったし、大きさもばらばらだし、かーわいー!
女子力が上がる壁紙できました。

今回は、randomSeed(5);というのを使っている。
これをいれていることで、ランダムだけど、毎回このプログラムを実行すればこの形に出会えるようにしている。他の形を見てみたければrandomSeed(0);とかrandomSeed(777);とかを入れてみればまた違った形に出会える。

randomSeedについては、
『遊んで学ぶ はじめてのプログラミング Processingの魔法学校』
Lv7魔法コンクール!?〜繰り返しと関数でアートに挑戦〜p,171-172
バラバラだけど毎回同じにする〜randomSeed〜バラバラな数の出方を決める。
で学んだ。こういうことなのかな、と思いながらやっている。

 

今後の課題

ファンシーな色合いを3つぐらい指定しといて、これらの中からどれかの色で塗ったハートを敷き詰めるとかしたい。このハートがつぎつぎ出てきては古いのが消えていくようなGIF動画を作ってみたいなぁ。

 

※↓参考図書です。randomSeedって何の役にたつのかな?っと思ってたけど、いまちょっとわかりかけてる。