読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



ファイアボール

Javagame

マウスでクリックした方向にファイアボールを飛ばします。

fireball.jar

始点と終点から角度を求める

画面中央の点からマウスでクリックした方向にファイボールを飛ばしたいので画面中央の点から見たマウスの位置を求める必要があります。

下の図を見てください。始点(start)から終点(target)へ直線を引いたときの角度directionがファイアボールを飛ばす方向となります。

f:id:aidiary:20090828225126g:plain

始点の座標(画面中央の点)と終点の座標(マウス位置)からその間の角度を求めるにはatan2()を使います。数学では逆正接 (アークタンジェント) と呼ばれています。難しいことはともかく使い方は簡単です。

  // 始点と終点から角度を計算する
  double direction = Math.atan2(target.y - start.y, target.x - start.x);

これで角度directionが求まります。directionは-180度〜180度をラジアンで表示した値です。Xの正の方向から半時計周りは負の角度、時計回りは正の角度となります。ラジアンを度に変換するにはMath.toDegrees()が使えます。ソースコード中のdirection の値を表示してみると角度がいくつか直感的につかめるので確かめてみてください。

角度から速度を求める

角度が求まりました。次は角度から速度を求めて見ます。ファイアボールの速度はspeed=10と定義されています。これをX方向の速度vxとY方向の速度vyに分解してやる必要があります。ボールを動かす(2004/9/19)を参照。

この分解はsin()とcos()を使います。図にすると下のような感じです。

f:id:aidiary:20090828225127g:plain

やっとX方向の速度vxとY方向の速度vyが求まりました。後はボールを動かす(2004/9/19)と同じです。ループが回るたびに距離に速度を足して移動させます。

ファイアボールの作り方や発射の仕方はインベーダーの弾の発射とほとんど同じです。