【科学技術計算講座8-3】Boidモデルのプログラミング方法

前回はBoidモデルの3つの行動規則を数式で表しました。

Boidモデルの3つの行動規則を数式で表してみます。科学技術計算講座8「Boidモデルで魚の群れをシミュレーション」の第2回目です。

今回はBoidモデルのプログラミング方法についてお話ししたいと思います。

プログラム言語

今回の講座では、プログラム言語はJavaScriptを使用することにします。なぜJavaScriptを使うかというと、魚の動きを簡単に可視化できるためです。

以前の講座「科学技術計算講座5-粒子法(SPH法)で流体シミュレーション」で流体の挙動を粒子で可視化しましたが、今回は同じ手法を使って魚の動きを可視化してみます。

つまり、JavaScriptの言語をベースとし、HTMLp5.jsなどを使うことにより簡単に動きのあるシミュレーションを行うことができるのです。

さらに、プログラムも多くの部分で「科学技術計算講座5」のプログラムを流用できます。この講座を一通り先に一読してみてください(粒子法の理論などは難しいのでスルーして頂いて構いません)。

粒子法(SPH法)を使った流体シミュレーションをJavaScriptでプログラミングしながら学びます。まずは粒子法やSPH法について説明します。科学技術計算講座5「粒子法(SPH法)で流体シミュレーション」の第1回目です。

JavaScript、p5.js、オブジェクト指向プログラミング、近傍粒子の探索、粒子の可視化などの項目で、一通りプログラミングの流れを把握しておくとスムーズです。プログラム自体も講座5のプログラムをほぼ流用して作っていきます。

では、早速プログラミングしていきます。もとになる「科学技術計算講座5」のプログラムは、以下の記事のソースコード(GitHubにリンク)です。

粒子の可視化部分を作り、全体を整理してプログラムを完成させます。科学技術計算講座5「粒子法(SPH法)で流体シミュレーション」の第12回目です。

このソースコードを参照しながら解説していきます。

クラスの定義

まず、クラスの定義ですが、今回使うのはVectorParticleCellRectangleです。Kernelクラスは、粒子法のカーネル関数に関するものなので必要ありません。

Vectorクラス

Vectorクラスは、2次元ベクトルを定義するためのクラスです。今回は、単位ベクトルへ変換するメソッドとベクトルの大きさを制限するメソッドをVectorクラスに追加しておきます。

  unit() {
    const mag = this.magnitude();
    if (mag > 0) {
      this.x /= mag;
      this.y /= mag;
    }
  }

  limitMax(value) {
    const mag = this.magnitude();
    if (mag > value) {
      this.x *= value / mag;
      this.y *= value / mag;
    }
  }

unit()は単位ベクトルへ変換するメソッドです。

limitMax(value)は、ベクトルの大きさを引数value以上にならないように制限するメソッドです。これは後述しますが、魚の速度が大きくなりすぎないように制限するために使います。

Particleクラス

Prticleクラスは、粒子を定義するためのクラスです。今回は、粒子は魚に相当します。

class Particle {
  constructor(x = 0, y = 0, vx = 0, vy = 0) {
    this.position = new Vector(x, y);
    this.velocity = new Vector(vx, vy);
    this.force = new Vector();
    this.active = true;
  }

ほぼそのまま使用しますが、コンストラクターに速度(vx 、vy)を入力できるようにしておきます。

Cellクラス

Cellクラスは、空間分割法のためのクラスです。魚は自分の周りの円内にいる他の魚によって移動方向を決めます。つまり、自分の近傍の魚を探す必要があります。魚の数が多いと一匹一匹の距離を測り、近傍にいる魚を探すと計算量が多くなって非効率になるため、バケット探索と呼ばれる空間分割法により効率的に近くにいる魚を探すことにします。

詳細は以下の記事を参照してください。

SPH法で近傍粒子をどのように探索するかについて説明します。またJavaScriptでプログラムを作成します。科学技術計算講座5「粒子法(SPH法)で流体シミュレーション」の第8回目です。

Cellクラスは、粒子法のプログラムと同じです。

Rectangleクラス

Rectangleクラスは、矩形の空間を定義するためのクラスです。これも粒子法と同じです。

まとめ

今回は、Boidモデルの本講座でのプログラミング方法を説明しました。粒子法のプログラムを流用することで、効率的にプログラムを作成していきます。

次回は、Boidモデルのメインである魚の移動方向の計算部分をプログラム作成していきます。


←前回 Boidモデルの行動規則

→次回 魚の移動方向のプログラム

全体の目次

スポンサーリンク
科学技術計算のご相談は「キャットテックラボ」へ

科学技術計算やCAEに関するご相談、計算用プログラムの開発などお困りのことは「株式会社キャットテックラボ」へお問い合わせください。

お問い合わせはこちら

フォローする