【Java】Mathクラスの利用
本稿は、数学関数が多数定義されているMathクラスの一部の機能を紹介します。
Mathクラスには数学関数を利用するためのstaticメソッドが多数存在します。
皆さんが大好きな、サインコサイン等ですね。
私は、偏差値30台の底辺校に通っていましたが、当時サインコサインのテストで30点台だったのは今でも覚えています。
私も数学は得意ではないですが、わかる範囲でゲーム制作に必要そうな機能のみ説明していきます。
PI定数
Math.PIでアクセス可能で、円周率を取得できます。
public class Test{ public static void main(String[] args){ System.out.println(Math.PI); } }
3.141592653589793
toRadiansメソッド
私たち一般人がわかる角度を引数に指定することで、ラジアンに変換します。
ラジアンとは角度の単位です。
だからどうしたって感じですが、基本的に数学関数には、このラジアンの値で引数に指定するので角度とラジアンの相互変換はできるようにしておきましょう。
基本的に同じものを表すと思って貰って構いません。
public class Test{ public static void main(String[] args){ System.out.println(Math.toRadians(90)); } }
1.5707963267948966
90度のラジアン値は1.5707963・・・ということがわかります。
toDegreesメソッド
ラジアン値を私たち一般人がわかる角度に変換します。
例えば、円周率は180度を表すラジアン値なのですが、円周率をこのメソッドに指定すると180が取得できます。
public class Test{ public static void main(String[] args){ System.out.println(Math.toDegrees(Math.PI)); } }
180.0
sinメソッド
sinメソッドは引数に角度を表すラジアン値を指定することで、円の中心点から指定した角度へ移動させる時のy座標の移動比率を-1(-100%)~1(100%)の間で取得できます。
これを利用すれば、シューティングゲームなどで特定の角度に弾を発射したい場合に、移動量*比率を計算するとその角度へ移動させるy座標量が計算できます。
public class Test{ public static void main(String[] args){ double kakudo = Math.toRadians(87); System.out.println(Math.sin(kakudo)); } }
0.9986295347545738
角度が87度の時のy座標の移動比率は0.99862・・・・になるようですね。
cosメソッド
cosメソッドは引数に角度を表すラジアン値を指定することで、円の中心点から指定した角度へ移動させる時のx座標の移動比率を-1(-100%)~1(100%)の間で取得できます。
sinと同じように、移動量*比率を計算するとその角度へ移動させるx座標量が計算できます。
public class Test{ public static void main(String[] args){ double kakudo = Math.toRadians(87); System.out.println(Math.cos(kakudo)); } }
0.052335956242943966
角度が87度の時のx座標の移動比率は0.05233・・・・になるようですね。
atan2メソッド
atan2メソッドは二点間のx座標距離と、y座標距離を指定することで、その角度のラジアン値を取得できます。
これをsin、cosメソッドと一緒に使用すれば、シューティングゲームなどで特定のキャラを狙って弾を移動させることができます。
ホーミング弾もここまでのメソッドのみで作成可能になってしまいます。
引数は第一引数にy座標の距離、第二引数にx座標距離を指定します。
よく間違えますので気を付けましょう。
public class Test{ public static void main(String[] args){ double kakudo = Math.atan2(100-0,100-0); System.out.println(Math.toDegrees(kakudo)); } }
45.0
このサンプルでは、座標[x1=0,y1=0]と座標[x2=100,y2=100]の二点間を想定し、その角度を求めています。
恐らく想像もしやすいかもしれないですが、ちょうど45度になります。
ちゃんと結果も45度になりました。
atan2ではラジアン値を取得するのですが、表示はtoDegreesメソッドを使用してわかりやすくしておきました。
randomメソッド
乱数を0~1未満で取得できます。
RPGなどでたまにクリティカルを出せるように実装したい場合などに使用できます。
public class Test{ public static void main(String[] args){ System.out.println(Math.random()); } }
0.18737128135247938
実行するたび結果が変わるはずです。
int型で指定範囲内のランダム値を出したい場合はRandomクラスを使用したほうが簡単なのですが、この稿ではrandomメソッドで算出する方法を紹介しておきます。
public class Test{ public static void main(String[] args){ //-50~50の間のランダム数値を算出 int rand = (int)(Math.random() * 101 - 50); System.out.println(rand); } }
-48
sqrtメソッド
引数に指定した数の平方根を取得します。
ピタゴラスの定理を利用し、二点間の距離を計算するために使用できます。
二点間の距離の出し方は円の当たり判定の稿で説明します。
public class Test{ public static void main(String[] args){ System.out.println(Math.sqrt(9)); } }
3.0
ディスカッション
コメント一覧
まだ、コメントがありません