【问题标题】:How to calculate rotation needed to face an object如何计算面向对象所需的旋转
【发布时间】:2021-12-28 19:29:34
【问题描述】:

如果重复 - 我已经从 stackoverflow 阅读了其他帖子。它们中的大多数都与 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

请不要将此标记为重复,我的数学技能甚至低于零。如果有人试图用我做的例子来回答我,我会更好地理解。

【问题讨论】:

  • 你是旋转后还是距离后?
  • 旋转,我已经有了距离脚本

标签: c# math rotation point


【解决方案1】:

你正在寻找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;    

【讨论】:

  • 我使用 Atan2 方法 2 天,直到我生气。当我旋转我的播放器时,计算出的角度似乎没有改变。也许我忘了提到我的播放器是一个 3D 对象。所以,我的玩家的旋转角度与它对 player2 的全局角度是分开的。你能帮我解决这个问题吗?
  • 这是什么意思。我的播放器知道坐标 (x: 2, y: ?? z: 3) (对于 z 我使用命名空间 y 作为 atan2) Rotations (x: ??, y: 0, z: ??) 请你帮我我求你了
  • @VictorTheBeast:首先,让我们定义问题。在最初的问题中,我看不到任何z 坐标和角度定义(我们正在寻找什么角度)。您为玩家#1 y 以及xz 玩家#2 打上问号。请问他们是什么意思?我已经根据你的草图解决了这个问题。如有不妥请重画
  • @VictorTheBeast: 或者您可能想要设置另一个 3d(空间)问题,其中两个玩家都有 x, y, z 坐标并且您正在寻找特定角度?
  • 嗯,通过你的方法,我能够从 2 个玩家中找到全局角度。所以我让player1在player2外面绕圈跑,值变化0-360,是的,它有效。但是在 3d 空间中它是不同的,因为角色具有局部方向,并且我也将其值转换为度数。所以,使用你的方法,我得到了全球定位。我如何将它应用到我的本地方向?我得到了局部方向,它甚至在度数上进行了转换,所以我能用你已经帮助我实现的全局方向找到在我面对目标之前还剩多少度?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多