↑なんか白いのが大量の敵の列
敵を動かす曲線の実装し直し。
これで一応敵が曲線上を等速で動きます。
てか曲がるところではある程度スピードを落としてやったほうが自然なようです。
そろそろ敵の配置とかアイテムの配分とかやりたい。
以下面倒な話
本当は
クロソイドのほうが曲率が連続で自然な曲線を描けるのですが、実装が難しく断念。あんまり綺麗な曲線ではないけど、実際にはそこまで複雑な曲線を使うこともないだろうと、
丸み不均一スプラインを長さを積分して等速で動けるようにした上で適当にアレンジしたものを採用しました。
隣り合う節点の角度と速度と距離を利用して角度を求めています。
だいぶ作業が進んでから、DirectXにはエルミートスプラインが標準で実装されているらしいことを知ったのですが、制御点を入れたりこっちはこっちで面倒なのでそのまま行きました。あんまり自作のコードが増えてもバグが増えて良くないんですけどね。
クロソイドに関するメモ
ネット上で拾えるライブラリは恐らく
libspiroのみ。
クロソイドをベジエ曲線に変換するためのプログラムで、
クロソイドを計算する機能も含まれているはず。
ただし、本来のクロソイドはこれのG2スプラインに当たる。
libspiroはG4スプラインもサポート。
G4スプラインは境界条件を4つ(始点・終点の曲率と角度)定められるため、
便利なのだと思われる。
具体的なライブラリの使い方とか仕組みとかは
作者の博士論文の第8章を元に推測。
run_spiro関数を使って節点から曲線の各特性値を得た上で、
(8.3)式あたりを利用してintegrate_spiroで座標を求める。
で、これを使うためには積分範囲を指定するためのs0,s1が必要で、
sは多分曲線の長さのパラメータ。
与えた長さとspiro_seg構造体のlあたりから求まるのだろうか?
と、ここまで来たところで
理解するだけにかかった苦難から予想される実装時の困難を想像して中止。
というかもう疲れた。
というか冷静に考えてその他諸々のスプラインで十分。
なんか無駄知識が増えたので良しとする。
実装に成功した人は連絡よろ!
最終更新:2010年02月09日 04:53