PVector_ellipse04
PVector pos1; PVector pos2; PVector pos3; void setup() { size(500, 500); colorMode(HSB, 360, 100, 100, 100); smooth(); noStroke(); background(0, 0, 100); } void draw() { fill(0, 0, 100, 20); rect(0, 0, width, height); translate(width/2, height/2); rotate(frameRate); pos1 = new PVector(0, 0); for (int i = 0; i < 360; i += 30) { float a = radians(i); pos2 = new PVector(cos(a)*2, sin(a)*2); pos1.add(pos2); fill(random(360), 100, 100, 50); ellipse(pos1.x, pos1.y, 50, 50); ellipse(pos1.y, pos1.x, 50, 50); for (int j = 0; j < 180; j += 1) { float b = radians(j); pos3 = new PVector(cos(b), sin(b)); pos1.add(pos3); fill(random(360), 100, 100, 50); ellipse(pos1.x, pos1.y, 30, 20); ellipse(pos1.y, pos1.x, 30, 20); } } }
つくりたいものとはちがうものができたけど,これはこれで気持ち悪いのでよい.雰囲気で何かは書けるようになったが,想像したものができないので,もっと修行が必要.
array_PVector_elipse02
int num = 50; PVector[] pos; PVector[] vel; color[] c; void setup() { size(500, 500); colorMode(HSB, 360, 100, 100, 100); smooth(); noStroke(); pos = new PVector[num]; vel = new PVector[num]; c = new color[num]; for (int i = 0; i < num; i ++) { pos[i] = new PVector(i*10, 0); vel[i] = new PVector(0, i*0.01); c[i] = color(random(360), 80, 80, 10); } } void draw() { fill(0, 0, 100, 1); rect(0, 0, width, height); for (int i = 0; i < num; i ++) { pos[i].add(vel[i]); fill(c[i]); ellipse(pos[i].x, pos[i].y, 20, 20); ellipse(pos[i].y, pos[i].x, 20, 20); ellipse(width-pos[i].x, pos[i].y, 20, 20); ellipse(height-pos[i].y, pos[i].x, 20, 20); if (pos[i].y < 0 || pos[i].y > height) { vel[i].y = - vel[i].y; } } }
昨日書いたスケッチの改良.円の色を変えたかったのでcolor
を使って,配列で色を変えてみた.最初,c[i] = new color(random(360), 80, 80, 10)
と書いてエラー.PVector
とは違うことに気づいて,c[i] = color(random(360), 80, 80, 10)
と書いたらOK.些細な事だけど,ここにすぐに気付けたのでわりとすぐ書けた.配列も少し慣れてきたかな.加速度の値を小さくして,背景に塗りつぶしの透明ど下げていったら,わりと気に入ったのができた.長く見ているとおもしろいです.
array_PVector_ellipse01
int num = 50; PVector[] pos; PVector[] vel; void setup() { size(500, 500); colorMode(HSB, 360, 100, 100); smooth(); noStroke(); pos = new PVector[num]; vel = new PVector[num]; for (int i = 0; i < num; i ++) { pos[i] = new PVector(i*10, 0); } for (int i = 0; i < num; i ++) { vel[i] = new PVector(0, i*0.1); } } void draw() { fill(0, 0, 100); rect(0, 0, width, height); for (int i = 0; i < num; i ++) { pos[i].add(vel[i]); fill(80, 80, 80); ellipse(pos[i].x, pos[i].y, 20, 20); if (pos[i].y < 0 || pos[i].y > height) { vel[i].y = - vel[i].y; } } }
PVector
で配列を使ってみようと書き始めたけれど,どツボにはまる.全くできない.わからない.PVector
自体を配列にできることをしらなくて,PVector
の値を配列に入れようとしていたのが,一番の敗因.「配列 PVector」で検索して,一番上にあったこのサイトを見てみたら,PVector[ ]
と書いてもいいんだということがわかって,そこから書き直す.やっと思っていたようなことができた.ここまで約1時間.疲れた.
参考サイト
array_ellipse03
int num = 30; int[] x = new int[num]; int[] h = new int[num]; int[] s = new int[num]; int[] b = new int[num]; int d = 1; void setup() { size(500, 500); colorMode(HSB, 360, 100, 100, 100); noStroke(); frameRate(60); for (int i = 0; i < num; i += 1) { x [i] = 10*i; } for (int i = 0; i < num; i += 1) { h[i] = 5*i; s[i] = 10*i%100; b[i] = 10*i%100; } } void draw() { background(0, 0, 100); for (int i = 0; i < num; i += 1) { x[i] += d; fill(h[i], s[i], b[i], 50); ellipse(x[i], x[i]+random(num), 20, 20); if(x[i] > width+300 || x[i] < -300){ d = - d; } } }
昨日に引き続き,配列の勉強.参考は以下のサイト.
少しづつ配列=入れ物というイメージがわかりつつある.入れ物をつくったら,番号をふって,データを入れる.これが重要.そして,番号で入れ物を呼び出し,そのなかのデータで描く.
array_ellipse02
int[] x; void setup() { size(500, 500); colorMode(HSB, 360, 100, 100); noStroke(); x = new int[20]; for ( int i = 0; i < 20; i ++) { x[i] = 20*i; } } void draw() { background(0, 0, 100); for (int i = 0; i < 20; i ++) { fill(random(360), 100, 100); ellipse(x[i], x[i], 20, 20); ellipse(500-x[i], 500-x[i], 20, 20); ellipse(x[i], 500-x[i], 20, 20); ellipse(500-x[i], x[i], 20, 20); x[i] += 1; } }
配列の勉強.
ここを参考にしてやってみた.まだ,頭のなかで配列のイメージができていないので,一週間かけて少しずつやっていく.
PVector_ellipse03
PVector pos; PVector vel; PVector fri; void setup() { size(500, 500); colorMode(HSB, 360, 100, 100); smooth(); noStroke(); pos = new PVector(width/2, 0); vel = new PVector(0, 1); fri = new PVector(0, 0); } void draw() { fill(0, 0, 100); rect(0, 0, width, height); pos.add(vel); vel.add(fri); fill(80, 100, 100); ellipse(pos.x, pos.y, 30, 30); vel.y += 0.01; fri.y += 0.0001; if (pos.y< 0 || pos.y > height) { vel.y = - vel.y; pos.x = random(width); } }
バウンドする感じをつくりたかった.何も見ないでここまで出来たのは,この夏の成果といっていいかもしれない.頭のなかでなにがどう変わったのかはまだ意識できないけれど,とりあえず何も見ないでProcessingのコードを書く領域の土台が出来てきた感じがある.明日からは,配列をやろう.
mouseXY_rects01
void setup() { size(500, 500); colorMode(HSB, 360, 100, 100); background(0, 0, 100); noStroke(); smooth(); } void draw() { fill(0, 0, 100); rect(0, 0, width, height); translate(mouseX, mouseY); for (int i =1; i < 10; i = i +1) { fill(80/i, 80, 80); rect(0, 0, (width-mouseX)/i, (height-mouseY)/i); fill(160/i, 80, 80); rect(0, 0, (0-mouseX)/i, (0-mouseY)/i); fill(240/i, 80, 80); rect(0, 0, (width-mouseX)/i, (0-mouseY)/i); fill(320/i, 80, 80); rect(0, 0, (0-mouseX)/i, (height-mouseY)/i); } }
お風呂に入っている時に思いついたかたちを描いてみた.最初はうまくできなかったけれど,translate
で原点を動かせばいいんだと考えたあとは,すんなりとできた.一度,for
を使わずに書いて,その後,for
を導入して,rect
を繰り返し描くようにした.