ジグザグ運動実装
実現するための考え方は固まってたんだけど、Cでの三角関数の扱い方がわからなかったのと、小数点以下を含む型を使い慣れてなかったので思わぬ苦戦を強いられました。
では、方法を説明します。
数学を教えるブログじゃないんで、ざっくりとした説明で。
座標の原点 ( 0 , 0 ) を中心とする半径 r の円を考える。
円周上の点 ( x , y ) の y は、その点と原点を結ぶ線とX軸の作る角度を θ とすると、
r × sinθ
と表すことができ、この値は0度から180度までは正の値を、180度から360度までは負の値をとる。
数値の流れを追ってゆくと、0度から少しずつ大きくなり、90度で最高点に達し、そこから小さくなり180度を境に負の領域に入る。
270度で最小値となり、そこから大きくなって行って360度で0になる。
一定の角速度で動いた場合、頂点となる90度と270度付近ほど数値の変化が小さくなるので、Y座標は加速、減速、反転、加速、減速、反転と滑らかな上下運動となる。
角度を1フレームごとに一定の量ずつ増やし、この y の値を敵機のY座標に足してやればOK。
敵のデータをまとめた構造体に、現在の角度、振幅(円の半径r)、円運動の角速度を追加しました。
この三つの値を変化させて、位相、振幅、波長をコントロールする感じ。
これに、最初の直線運動の関数も通して、X座標を変化させれば、きちんと波のようなジグザグに動きます。
ソース部分も軽く説明を。
まず、三角関数を使うためにmath.hをインクルード。
あと、C言語では角度を『度』ではなくラジアン(360度を”2×パイ”とする表現)で表すみたいなので、パイ(円周率)の値と、度をラジアンに変換する式の定数宣言を追加しました。
数値を入力する時は『度』で入力できた方が個人的にはイメージしやすいからです。
あとは、必要なデータを敵機の構造体に追加し、上記の考え方をコード化した関数を追加しました。
実行ファイルをどうぞ。
ソーステキストも同梱です。
ダウンロードの方法や操作については#2の記事を参照してください。
http://multip.net/view/0lTRTZOC1F
いつもの事ですが、プログラミングと格闘の末、最後の力を絞ってブログを更新してるので、脳が上手く働いてません。
文体が統一されてなかったり、説明が不足してるのは勘弁してください(笑)
あ、誤字もね。
- ABOUT
- カレンダー
04 | 2025/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 最新コメント
- プロフィール
はい。
- ブログ内検索
- カウンター
- アクセス解析