如何计算面对物体所需的旋转

How to calculate rotation needed to face an object

如果重复 - 我已经阅读了 Whosebug 的其他帖子。他们中的大多数都与 Unity3D 相关联,并且其中很多都使用 theta/omega 等关键字。我无法理解那些东西。另外,我对这些公式符号的了解为 0,所以我对所读内容的理解为 0%。

我尝试为视频游戏制作一个机器人,我唯一坚持的是如何获得所需的旋转度数,直到我面对给定的坐标。在这里,我快速举例说明了我在编程中遇到的问题。

我所知道的情况:

  1. 玩家1位置
  2. Player1 旋转
  3. 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;