インターネットで検索してみましたが、アンサーが見つかりませんでした。
最初のベクトルから見た 2 つのベクトル間の角度を計算しようとしています。
したがって、ベクトル 1 が 0,0 にあり、ベクトル 2 が 1,1 にある場合、見出しは 45 になります。
1.0 では 90 になります。
-1.0 では 270 になります。
これを作成する簡単な解決策はありますか?
インターネットで検索してみましたが、アンサーが見つかりませんでした。
最初のベクトルから見た 2 つのベクトル間の角度を計算しようとしています。
したがって、ベクトル 1 が 0,0 にあり、ベクトル 2 が 1,1 にある場合、見出しは 45 になります。
1.0 では 90 になります。
-1.0 では 270 になります。
これを作成する簡単な解決策はありますか?
私はそれをテストすることはできませんが、これはうまくいくはずです:
double getHeading(Vector2 a, Vector2 b)
{
double x = b.x - a.x;
double y = b.y - a.y;
return Math.Atan2(y, x) * (180 / Math.PI);
}
ご回答ありがとうございます。手動で計算することにしました。私の後にこの質問を見つけた人のために、これが私がやった方法です:
double calculateHeading(Transform target){
double newHeading = 0;
Vector3 vectorToTarget = target.position - transform.position;
double x = vectorToTarget.x;
double y = vectorToTarget.y;
if (x == 0 && y > 0) {
newHeading = 0;
} else if (x == 0 && y < 0) {
newHeading = 180;
} else if (x > 0 && y == 0) {
newHeading = 90;
} else if (x < 0 && y == 0) {
newHeading = 270;
} else if (y < 0) {
newHeading = 180 + (Mathf.Rad2Deg * Mathf.Atan (vectorToTarget.x / vectorToTarget.y));
} else if (y > 0) {
newHeading = 360 + (Mathf.Rad2Deg * Mathf.Atan (vectorToTarget.x / vectorToTarget.y));
}
if (newHeading > 360) {
newHeading -= 360;
} else if (newHeading < 0) {
newHeading += 360;
}
return newHeading;
}