100日チャレンジ『100日で50弾!』第11回、バラ弾です。バラ曲線というのを使い、弾を移動させます。バラ曲線は次の式で定義されます。
r = a *(float)Math.Sin(k * s)
aは大きさを表し、kは花びらの枚数に関係します(kが奇数ならk枚、偶数なら2k枚)。これは極座標による表し方です。通常のxy座標での式に直すと次の通り。
x = r * (float)Math.Cos(s)
y = r * (float)Math.Sin(s)
rはさっきの式のrを使います。
sとして時間を使って座標(x, y)である点をプロットしてゆけば、花びら何枚かの曲線が描かれます。曲線の形が分かるように、手前方向には移動させずに弾を動かすと次のような感じになります。

そして、実際の弾のように手前方向にも動かすと次。

最後、aとkを乱数で決めていろいろなバラ曲線を描くようにしたもの。
簡単な式できれいな曲線になりますね。シューティングゲームを書いているとき、今までは敵機の移動させるためにこういう感じの曲線も使っていました。でも弾の移動は直線ばかり。撃った弾が(軌道は直線で)星形に広がるなどは使っていましたが。しかし考えてみればアニメなんかでもいろんな方向に撃ったたくさんの弾が目標を追いかける、なんて場面もよく見かけますよね……。どっちみち架空の世界のゲームなのだからキレイならそれでいい!
ではこれにてBullet11は終了です!