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

明日への断片

ゲーム制作やプログラミング関する記事を中心に更新していこうと思います。

32欠片目:ゲーム制作に便利な数学関数~atan2編~

C/C++ プログラミング 数学

 こんにちは。座右の銘は『人畜無益』のvoidです。
今回は唐突に数学関数紹介の続きをやっていきたいと思います。

おさらい

数学関数を使うときは、

#include <math.h>

が必要でしたね。

atan2(エータンツ―)

 このatan2というのは、2個の引数(y, x)を基にアークタンジェントを計算するというものです。

簡単にまとめると2つの座標から角度(ラジアン値)を求めることが出来るというものです。

注意点としては、引数の順番が(y, x)と、yが第1引数に来ることです。普通の座標系に慣れているとついxが先に来てしまうので要注意です!


角度が分かりやすいように、縦が2横が2の直角二等辺三角形の角度計算を例に挙げてみます。

#include <math.h>
#include <stdio.h>

int main(void)
{
	float x = 2.0;
	float y = 2.0;

	float angle = atan2(y, x);      // 角度をラジアン値で求める

	angle = angle * (180 / 3.141592);   // ラジアン値を度数法に変換する

	printf("%.2f", angle);


	return 0;
}
実行結果:
45.00


f:id:yasu-game-void:20170313012439p:plain

図で表すとこんな感じになります。



このことを応用してあげると、プレイヤーの座標と敵の座標から、「敵がプレイヤーから見てどの方向にいるか」を調べることが出来ます。


f:id:yasu-game-void:20170313013422p:plain

プ:プレイヤー

プレイヤのx座標,y座標をそれぞれplayer.x,player.yで表し、
敵のx座標,y座標をそれぞれenemy.x,enemy.yで表すとします。


このように、2つのオブジェクトの座標の差を使うことで、上の図と同じように角度を導き出すことが出来ます。ホーミングとかに使えそうですね!

お疲れ様でした。疲れました。

 本日は以上です。ではまた!