【Processing】公式サイトにあったFlockingを理解する過程3

プログラミング
Photo by Sasin Tipchai on Pixabay

こんにちは、コンスキです。

下の記事の続きを書いていきます。

ここまでの振り返り

ここまでの内容を振り返ります。

まず、次のような順番でスクリプトを見てきました。

  1. Flocking.pde
  2. Flock.pde
  3. Boid.pde

draw関数が設定されているFlocking.pdeから見始めました。

そこで、Flockクラスのインスタンスが作成されていたためFlock.pdeを見ました。

そこでもまた、Boidクラスのインスタンスを要素に持つArrayリストが作成されていて、今度はBoid.pdeを見始めます。

Boid.pdeの中は次の順番で見ました。

  1. Boidクラスの定義
  2. Boidクラスの定義の中にあったrunメソッドの定義
  3. さらにその中にあったflockメソッドの定義

Boid.pdeを見ると、初めの方でBoidクラスの定義がされていました。

Boidクラスの定義を確認すると、runメソッドが定義されています。

そこでrunメソッドの定義を見てみると、その中で次の4つのメソッドが実行されることになっていました。

  • flockメソッド
  • updateメソッド
  • bordersメソッド
  • renderメソッド

前回はこの中のflockメソッドの定義を見たところで終わりました

updateメソッド

先ほどのメソッドのうち、2つ目であるupdateメソッドの定義を見ていきます。

  • flockメソッド
  • updateメソッド
  • bordersメソッド
  • renderメソッド
// Method to update position
void update() {
  // Update velocity
  velocity.add(acceleration);
  // Limit speed
  velocity.limit(maxspeed);
  position.add(velocity);
  // Reset accelertion to 0 each cycle
  acceleration.mult(0);
}

1つ目のコメントを見てみると次のように書いてあります。

位置を更新するためのメソッド

その名の通り、このメソッドを呼び出すと、ボイドの位置をアップデートしてくれるようです。

思い返すと、Boidクラスの定義の最初の方で、変数がいくつか定義されていました。

その中では、ボイド一つ一つの位置を表す「position」が定義されていました。

class Boid {
  
  PVector position;
  PVector velocity;
  PVector acceleration;
  float r;
  float maxforce;    // Maximum steering force
  float maxspeed;    // Maximum speed
  PImage onomatopes;
  
  Boid(float x, float y) {
    acceleration = new PVector(0, 0);
        .
        .
        .
//クラスの定義が続く

位置を更新するというのは、この変数を更新するという意味です。

しかし、更新するためのスクリプトだけが書かれているわけではなさそうです。

変数positionを更新するまでの手順は、次のようになっています。

加速度(acceleration)を速度に足す

    ▼

速度(velocity)を制限する

    ▼

位置(position)に速度を足す

bordersメソッド

4つメソッドのうち、3つ目の「bodersメソッド」の定義を見ていきます。

  • flockメソッド
  • updateメソッド
  • bordersメソッド
  • renderメソッド
  // Wraparound
  void borders() {
    if (position.x < - r) position.x = width + r;
    if (position.y < - r) position.y = height + r;
    if (position.x > width + r) position.x = -r;
    if (position.y > height + r) position.y = -r;
  }

変数rが何を表しているのかよくわかりません。

ただ、4つのif文から推測するとボイドの半径ではないかと思われます。

例えば定義の1行目↓であれば

if (position.x < - r) position.x = width + r;

ボイドの位置がウィンドウの左端に来たら、ボイドの位置をウィンドウの右端に移動する

という意味になりそうです。

次回に続きます

この続きは別の記事に書きます。

コメント

  1. […] 【Processing】公式サイトにあったFlockingを理解する過程3こんにちは、コンス… […]

タイトルとURLをコピーしました