記録

勉強したことに関するのノート。見返して分かるようにしてます。

今日のお話

今日はコンクール用のスケッチを足したり変えたりしながらいろいろ試行錯誤していた。

色々やってて久々にあんなコードあったなーとか、どうすればいいだろうとか、これ使ったスケッチ昔やらなかったっけなとか思い出しながらやってた。

 

原点保存のコード書くときにいつも先にpopMatrix先に書いてしまう。先に覚えたのpopMatrixのせいでpop、pushで書いてしまう。push、pop。覚える。

あとscaleは原点からプラス方向に拡大するのでellipseの中心がずれることも学んだ。

 

後久々にframeCountも見た。またそれを使ったスケッチ思い出さなきゃ。

多分これからはのんびりやる。作ったスケッチとかは上げ続けるけどそんなにたくさんできるかは分からない。

頑張る。

PVector理解6

int num=500;
PVector[] pos=new PVector[num];
PVector[] vel=new PVector[num];
color[] c=new color[num];
int[] r=new int[num];


void setup() {
  size(960, 540);
  colorMode(HSB, 360, 100, 100);

  for (int i=0; i<num; i=i+1) {
    pos[i]=new PVector(random(width), random(height));
    vel[i]=new PVector(random(1, 3), random(1, 3));
    c[i]=color(random(360), random(50, 100), random(50, 100));
    r[i]=int(random(2, 10));
  }
}
void draw() {
  //background(0, 0, 0);
  fill(0, 0, 0, 5);
  rect(0, 0, width, height);
  //noStroke();
  for (int i=0; i<num; i=i+1) {
    vel[i]=new PVector(random(-3, 3), random(-3, 3));
    fill(c[i]);
    ellipse(pos[i].x, pos[i].y, r[i]*2, r[i]*2);
    pos[i].add(vel[i]);

    if (pos[i].x>=width-r[i]||pos[i].x<=0+r[i]) {
      vel[i].x=vel[i].x*-1;
    }
    if (pos[i].y>=height-r[i]||pos[i].y<=0+r[i]) {
      vel[i].y=vel[i].y*-1;
    }
  }
}

刻一刻と変わる迷路。
size(x,y,FX2D)にすると何故か軽くなることも学んだ。
以上で昨日作ったスケッチ発展終了

この2か月ほどでいろいろできた。今まで作ったスケッチの半分はこの夏に作ったものだし。まだまだ学ぶべきことはあるけど頑張れたと思う。

PVector理解5

int num=500;
PVector[] pos=new PVector[num];
PVector[] vel=new PVector[num];
color[] c=new color[num];
int[] r=new int[num];


void setup() {
  size(960, 540, FX2D);
  colorMode(HSB, 360, 100, 100);

  for (int i=0; i<num; i=i+1) {
    pos[i]=new PVector(random(width), random(height));
    vel[i]=new PVector(random(1, 3), random(1, 3));
    c[i]=color(random(180, 200), random(50, 100), random(50, 100));
    r[i]=int(random(2, 10));
  }
}
void draw() {
  //background(0, 0, 0);
  fill(0, 0, 0, 5);
  rect(0, 0, width, height);
  //noStroke();
  for (int i=0; i<num; i=i+1) {
    pos[i]=new PVector(random(width), random(height));
    vel[i]=new PVector(random(1, 3), random(1, 3));
    fill(c[i]);
    ellipse(pos[i].x, pos[i].y, r[i]*2, r[i]*2);
    pos[i].add(vel[i]);

    if (pos[i].x>=width-r[i]||pos[i].x<=0+r[i]) {
      vel[i].x=vel[i].x*-1;
    }
    if (pos[i].y>=height-r[i]||pos[i].y<=0+r[i]) {
      vel[i].y=vel[i].y*-1;
    }
  }
}

雨がザアザアと降っているように見えた。もはやif文は作動してない。色も似てる色に設定。

PVector理解4

int num=500;
PVector[] pos=new PVector[num];
PVector[] vel=new PVector[num];
color[] c=new color[num];
int[] r=new int[num];


void setup() {
  size(960, 540);
  colorMode(HSB, 360, 100, 100);

  for (int i=0; i<num; i=i+1) {
    pos[i]=new PVector(random(width), random(height));
    vel[i]=new PVector(random(1, 3), random(1, 3));
    c[i]=color(random(360), random(50, 100), random(50, 100));
    r[i]=int(random(2, 10));
  }
}
void draw() {
  //background(0, 0, 0);
  fill(0, 0, 0, 5);
  rect(0, 0, width, height);
  //noStroke();
  for (int i=0; i<num; i=i+1) {
    vel[i]=new PVector(random(1, 3), random(1, 3));
    fill(c[i]);
    ellipse(pos[i].x, pos[i].y, r[i]*2, r[i]*2);
    pos[i].add(vel[i]);

    if (pos[i].x>=width-r[i]||pos[i].x<=0+r[i]) {
      vel[i].x=vel[i].x*-1;
    }
    if (pos[i].y>=height-r[i]||pos[i].y<=0+r[i]) {
      vel[i].y=vel[i].y*-1;
    }
  }
}

バウンドしなかった。流れ星っぽい。
何故ダメだったのか思い出せない。どこいじったっけ…。

PVector理解3

int num=1000;
PVector[] pos=new PVector[num];
PVector[] vel=new PVector[num];
color[] c=new color[num];
int[] r=new int[num];


void setup() {
  size(960, 540);
  colorMode(HSB, 360, 100, 100);

  for (int i=0; i<num; i=i+1) {
    pos[i]=new PVector(random(width), random(height));
    vel[i]=new PVector(random(-3, 3), random(-3, 3));
    c[i]=color(random(360), random(50, 100), random(50, 100));
    r[i]=int(random(2, 10));
  }
}
void draw() {
  fill(0, 0, 0, 50);
  rect(0, 0, width, height);
  for (int i=0; i<num; i=i+1) {
    fill(c[i]);
    ellipse(pos[i].x, pos[i].y, r[i]*2, r[i]*2);
    pos[i].add(vel[i]);

    if (pos[i].x>=width-r[i]||pos[i].x<=0+r[i]) {
      vel[i].x=vel[i].x*-1;
    }
    if (pos[i].y>=height-r[i]||pos[i].y<=0+r[i]) {
      vel[i].y=vel[i].y*-1;
    }
  }
}

ボールが1000個に増えて、色もバラバラで、サイズもバラバラ。飛ぶ方向も(さっき書き換えて)バラバラにしました。軌跡も少し見えるよ

PVector理解2

PVector pos;//position
PVector vel;//velocity,速さ
int r=50;

void setup() {
  size(960, 540);
  colorMode(HSB, 360, 100, 100);
  pos=new PVector(width/2, height/2);//初期化
  vel=new PVector(2, 3);
}

void draw() {
  background(220, 20, 20);
  fill(0, 100, 100);
  noStroke();
  ellipse(pos.x, pos.y, r*2, r*2);
  pos.add(vel);


  if (pos.x>width-r||pos.x<0+r) {
    vel.x=vel.x*-1;
  }
  if (pos.y>height-r||pos.y<0+r) {
    vel.y=vel.y*-1;
  }
}

今日はこれを起点としていろいろ発展させて作った。

【今日の勉強】
ベクトルの中には「位置[pos](x,y)」「移動方向や速さ[vel](Xspeed,Yspeed)」を意味することができる。
円の中心ではなく、端でバウンドさせようとするときはif文の条件に中心の座標-rを設定する(但しellipse(x,y,r×2,r×2)にする必要がある)
今日は久しぶりに1人勉強じゃなかったから楽しかった。 ここから発展したものはまた少しずつ書いていきたい。

PVector理解1

yetirom.hatenablog.com

これをまず理解することを目標に勉強を始めます。

 

【ベクトルについて】

高校で習う数Bの内容だそうですが私は学んでないのでそこからスタートです。

http://www.geocities.co.jp/Technopolis/1505/vx_index.htm

ここのサイトを基に勉強します。

 

【今の私の理解】

「ベクトル」は方眼紙の上を斜めに移動するもの。

その対となるのは「スカラー」で、数直線上を移動するかんじ。

ベクトルは向きを持った量。

今ベクトルの引き算とか見てるけどよくわかんない。

 

あとPVectorは必ず(x、y)なのかなって思った。

 

addはPVectorっていう大きなくくりの中で動くものなのかとも思った。

reference内でもPVectorというクラスに属していた。

PVectorのreferenceの中にaddの説明文に「1つのベクトルをもう一方に足して独立したベクトルを生成する」と書いてあった。それがその下のellipseの位置?