根据雷达面向的角度中心x,y计算新的X,Y位置

本文关键字:位置 计算 雷达面 | 更新日期: 2023-09-27 18:35:19

我的游戏中有一个雷达。现在,雷达使用静态 X,Y 图工作,该图不会根据您在游戏中面对的情况进行旋转。

我希望雷达上的 X、Y 位置根据您面对的方向旋转。你前面的怪物将永远出现在雷达的顶部。

现在,雷达是静态的,你以北的怪物将永远出现在雷达的北方。

目前,我有这样的数学:

int x = (int)(x * Math.Cos(Math.PI * angle / 180) + y * Math.Sin(Math.PI * angle / 180));
int y = (int)(y * Math.Cos(Math.PI * angle / 180) - x * Math.Sin(Math.PI * angle / 180));

然后我将中心X和中心Y添加到上面的整数中,但是图形很奇怪,似乎只能从359~度角开始工作。在计算之前,我尝试添加我的中心 X 和中心 Y,但它总是关闭。

我在网上找到的其他代码根据度数/角度进行区分。

if (angle >= 0 && angle <= 180)
{
x = (int)(x * Math.Cos(Math.PI * angle / 180) - y * Math.Sin(Math.PI * angle / 180));
y = (int)(x * Math.Sin(Math.PI * angle / 180) + y * Math.Cos(Math.PI * angle / 180));
}
else
{
x = (int)(x * Math.Cos(Math.PI * angle / 180) - y * Math.Sin(Math.PI * angle / 180));
y = (int)(x * Math.Sin(Math.PI * angle / 180) + y * Math.Cos(Math.PI * angle / 180));
}
我需要取中心X(cX

),中心Y(cY),我面对的角度和目标X(tX),目标Y(tY)来重新定位目标X和Y的正确公式是什么。

根据雷达面向的角度中心x,y计算新的X,Y位置

显而易见的答案是使用相同的旋转代码来旋转您的视角来旋转雷达坐标,但我想您出于某种原因拒绝了这一点。

所有这些示例代码都是错误的x被覆盖,然后用于查找y的新值。 这永远行不通。

基本的基本旋转公式如下所示:

x2 = (int)(x * Math.Cos(Math.PI * angle / 180) - y * Math.Sin(Math.PI * angle / 180));
y2 = (int)(x * Math.Sin(Math.PI * angle / 180) + y * Math.Cos(Math.PI * angle / 180));

但是,如果付款人远离 0,0,您将需要

x2 = (int)((x - player_x) * Math.Cos(Math.PI * angle / 180) - (y - player_y) * Math.Sin(Math.PI * angle / 180));
y2 = (int)((x - player_x) * Math.Sin(Math.PI * angle / 180) + (y - player_y) * Math.Cos(Math.PI * angle / 180));

这将使 0,0 保持在以玩家为中心的雷达上

关于您的游戏如何测量角度,您可能需要交换罪恶项上的符号。