水族館を作ろう:擬似ポテンシャル力による衝突判定~流れるプールでぐ~るぐる~■はじめに今回は衝突判定です。壁にぶつからないようにする処理を入れます。対流を起こす処理を入れます。これによって、水族館のように魚が一方向に泳ぎます。今回のネタは、珍しくオリジナルです。今回のソースは、次のものです。(BOID:ポテンシャル力による衝突判定)ぐるぐるぐるぐる回ります。動きに関して追加する関数は、2つです。FeelFlowで、前者が障害物を避け、後者が対流を感じて動きます。世界の境界の処理}■障害物を避けるでは、実際の障害物の避け方です。障害物の距離に応じて、よけ方を変えるということです。『障害物が遠くにあるときは、あまり障害物を気にしないが、障害物が近くにあるときは、急激によける』ということです。いくつか方法があると思いますが、私は、大学で物理をやっていたので、物理でよく知られた方法で扱おうと思います。それがポテンシャル法です。ポテンシャル法とは、障害物からの距離に応じて『ポテンシャル』と呼ばれる量が変化します。力は、ポテンシャルの傾いている方向に働き、大きさはポテンシャルの傾きに比例します。ポテンシャルの傾きが急なら力は大きくなり、傾きがなだらかなら、力は小さくなります。イメージとしては、山の高さがポテンシャルで、急な山ほど上るのが大変ということです。今回用いるポテンシャルは、物理で用いるポテンシャルそのものではありません。壁からの距離に応じて決まる、擬似的なポテンシャルです。実際のポテンシャルは、壁の場合には壁から1Å程度しか存在しません。このポテンシャルは、壁が見える程度の範囲でも存在するもので、BOIDの感じる『氣』のポテンシャルといえます。今回のポテンシャルは、距離の2乗に反比例する強さのものを用います。このポテンシャルによって、BOIDは壁に近づきすぎたときに、壁から避けようとします。