バレンタインだけど、三角形を並べます
Processing使って、バレンタインになにを必死になって三角形を並べてんだと思いますが、並べました。ランダムに、しかも、ひっくり返ってたりもします。iphone SEの壁紙にできるように、大きさは横640ピクセル、縦1136ピクセルに合わせています。
random_cast_triangle.pde(※この記事の下にちょっと改良版載せてます20170219)
--------------------------------------
void setup(){
size(640,1136);
background(#63F09A);
strokeWeight(1);
stroke(0);
int h =30;//正三角形の辺の長さ
for(int i=0;i<2000;i++){
int tx = int(random(0,640/h+1));//x方向に何個目の三角形か
int ty = int(random(0,1136/h*2));//y方向に何個目の三角形か
fill(0,random(150,255),random(100,200));
if (i%2==0){
float x1=-h/2+h*tx;
float y1=h*sin(radians(60))*ty;
float x2=x1-h/2;
float y2=y1+h*sin(radians(60));
float x3=x2+h;
float y3=y2;
float x4=x1+h;
float y4=y1;
triangle(x1,y1,x2,y2,x3,y3);
}else{
float x1=-h/2+h*tx;
float y1=h*sin(radians(60))*ty;
float x2=x1-h/2;
float y2=y1+h*sin(radians(60));
float x3=x2+h;
float y3=y2;
float x4=x1+h;
float y4=y1;
triangle(x1,y1,x3,y3,x4,y4);
}
}
}
void draw(){}
void keyPressed(){
if(keyCode==ENTER){
save("random_cast_triangle.png");
}
}
--------------------------------------
エンターキー押して画像保存!
数式の美しさはどこへ行った。なんかすごい力技で作った気がする。
Processingのマスターから見たら、多分、ここはこっちに統一できる、とかあるんだろうな。同じことを繰り返し書いているのがすごく気持ち悪いんだけど、消すとダメだって怒られるから残している。もう少し知識を増やしてかっこよく計算式をまとめてみたい。
今回のまとめ
・トライアングルを正位置と逆位置とでランダムに並べることができた。
・ifとelse使ってみた
・sin(radians(90))使ってみた
今後の課題
・使う色を選んでランダムに並べてみたい。
・六角形も綺麗にしきつめてみたい。蜂の巣みたいに。
・ひし形をしきつめたい。(中心点を規定して描くとかできないかなぁ)
・いちご並べたい
・桜舞わせたい
・Processingで3Dの世界覗いてみたい。
------
ちょっとプログラムいじったので追記。通りすがりさんのコメントで学んだことを入れてみた。(他にも色々いじってるのでごちゃごちゃはしている。)
random_cast_triangle2.pde
--------------------------------
void setup(){
size(640,1136);
background(0);
smooth();
strokeWeight(1);
stroke(0);
colorMode(HSB, 360, 100, 100, 100);
int h =30;//正三角形の辺の長さ
for(int i=0;i<2000;i++){
int tx = int(random(0,640/h+1));//x方向に何個目の三角形か
int ty = int(random(0,1136/h*2));//y方向に何個目の三角形か
fill(random(140,180),random(80,100),100,random(100));
float x1=-h/2+h*tx;
float y1=h*sin(radians(60))*ty;
float x2=x1-h/2;
float y2=y1+h*sin(radians(60));
float x3=x2+h;
float y3=y2;
float x4=x1+h;
float y4=y1;
if (i%2==0){
triangle(x1,y1,x2,y2,x3,y3);
}else{
triangle(x1,y1,x3,y3,x4,y4);
}
}
}
void draw(){}
void keyPressed(){
if(keyCode==ENTER){
save("random_cast_triangle2.png");
}
}
--------------------------------
上記のプログラムのポイントは、ifの前にfloat x1・・・とかの条件をまとめて書くことができた、というところ。繰り返し書くのはできるだけ避けたいもんね!画像は下記のようになる。RGBではなく、HSBで色を指定することで思ったような色を指定したいんだけど、Hueの範囲がまだ自分の中でつかめていない。緑〜青にかけてのサイバーっぽい色合いにしてみたいなぁ。とりあえず現時点ではこんなかんじ。この三角も綺麗に並べ直したいんだよなぁ。。。