如何计算面对物体所需的旋转
How to calculate rotation needed to face an object
如果重复 - 我已经阅读了 Whosebug 的其他帖子。他们中的大多数都与 Unity3D 相关联,并且其中很多都使用 theta/omega 等关键字。我无法理解那些东西。另外,我对这些公式符号的了解为 0,所以我对所读内容的理解为 0%。
我尝试为视频游戏制作一个机器人,我唯一坚持的是如何获得所需的旋转度数,直到我面对给定的坐标。在这里,我快速举例说明了我在编程中遇到的问题。
我所知道的情况:
- 玩家1位置
- Player1 旋转
- Player2位置(我需要面对这个玩家)
2D map of the situation. Click here
这是它在 c# 中的样子
using System;
public class Program
{
// Player 1 cordinates
public static float p1x = 2;
public static float p1y = 3;
public static float p1rotation = 0; // In degrees 0-360
// Player 2 cordinates
public static float p2x = 6;
public static float p2y = 4;
// Player 1 needed degree to face Player 2
public static float needed_distance;
public static void Main()
{
needed_distance = ??; // no clue how to get this value ...
Console.WriteLine("The needed distance is: "+needed_distance);
}
}
您也可以编辑此代码并直接在此处执行 -> https://dotnetfiddle.net/b4PTcw
请不要将此标记为重复,我的数学水平甚至低于零。如果有人试图用我做的例子回答我,我会更好地理解。
您正在寻找Math.Atan2方法:
private static float Rotation(float p1x, float p1y, float p2x, float p2y) =>
(float)(Math.Atan2(p1x - p2x, p2y - p1y) * 180.0 / Math.PI + 630) % 360.0f;
private static float Distance(float p1x, float p1y, float p2x, float p2y) =>
(float)Math.Sqrt((p1x - p2x) * (p1x - p2x) + (p1y - p2y) * (p1y - p2y));
演示:
Console.WriteLine(Rotation(2, 3, 6, 4));
结果:
194.0362548828125
所以,如果玩家 #1 初始 rotation1 = 0
(s) 他需要转弯 ~ 194
度。如果玩家#1 任意初始rotation1
:
float rotation1 = ...;
float requiredRotation = (Rotation(p1x, p1y, p2x, p2y) -
(rotation1 % 360f) + 360f) % 360f;
如果重复 - 我已经阅读了 Whosebug 的其他帖子。他们中的大多数都与 Unity3D 相关联,并且其中很多都使用 theta/omega 等关键字。我无法理解那些东西。另外,我对这些公式符号的了解为 0,所以我对所读内容的理解为 0%。
我尝试为视频游戏制作一个机器人,我唯一坚持的是如何获得所需的旋转度数,直到我面对给定的坐标。在这里,我快速举例说明了我在编程中遇到的问题。
我所知道的情况:
- 玩家1位置
- Player1 旋转
- Player2位置(我需要面对这个玩家)
2D map of the situation. Click here
这是它在 c# 中的样子
using System;
public class Program
{
// Player 1 cordinates
public static float p1x = 2;
public static float p1y = 3;
public static float p1rotation = 0; // In degrees 0-360
// Player 2 cordinates
public static float p2x = 6;
public static float p2y = 4;
// Player 1 needed degree to face Player 2
public static float needed_distance;
public static void Main()
{
needed_distance = ??; // no clue how to get this value ...
Console.WriteLine("The needed distance is: "+needed_distance);
}
}
请不要将此标记为重复,我的数学水平甚至低于零。如果有人试图用我做的例子回答我,我会更好地理解。
您正在寻找Math.Atan2方法:
private static float Rotation(float p1x, float p1y, float p2x, float p2y) =>
(float)(Math.Atan2(p1x - p2x, p2y - p1y) * 180.0 / Math.PI + 630) % 360.0f;
private static float Distance(float p1x, float p1y, float p2x, float p2y) =>
(float)Math.Sqrt((p1x - p2x) * (p1x - p2x) + (p1y - p2y) * (p1y - p2y));
演示:
Console.WriteLine(Rotation(2, 3, 6, 4));
结果:
194.0362548828125
所以,如果玩家 #1 初始 rotation1 = 0
(s) 他需要转弯 ~ 194
度。如果玩家#1 任意初始rotation1
:
float rotation1 = ...;
float requiredRotation = (Rotation(p1x, p1y, p2x, p2y) -
(rotation1 % 360f) + 360f) % 360f;