如何将X和Y屏幕坐标转换为-1.0、1.0 float? (在 C 中)

How to convert X and Y screen coordinates to -1.0, 1.0 float? (in C)

我正在尝试将 X 和 Y 屏幕坐标转换为 -1.0 到 1.0 的浮点范围。

(-1,-1 为 0,0,如果分辨率为 640x480,则 1,1 为 640,480。0,0 为 320,240...中心。)

我将如何处理这个问题?我做了几次徒劳的尝试,而且我不太擅长数学。

X方向:

  1. 屏幕坐标0对应-1.0.
  2. 屏幕坐标640对应1.0.

您可以将其转换为等式:

给定fX浮点坐标,屏幕坐标sX为:

sX = 640*(fX + 1.0)/2.0

sX = 320*(fX + 1.0)

同理,给定浮点坐标fY,则屏幕坐标sY为:

sY = 480*(fY + 1.0)/2.0

sY = 240*(fY + 1.0)

它的倒数:

给定屏幕坐标中的 sX,实际坐标中的 fX 为:

fX = (sX/320 - 1.0)

给定屏幕坐标中的 sY,实际坐标中的 fY 为:

fY = (sY/240 - 1.0)

将其转换为代码时,请确保最后两个方程式有一个 1.0。否则,您将因整数除法而失去准确性。

fX = (1.0*sX/320 - 1.0)
fY = (1.0*sY/240 - 1.0)

这是一些 C 代码

void convert(int X, int Y)
{
  float newx = 2*(X-320.0f)/640.0f;
  float newy = 2*(Y-240.0f)/480.0f;

  printf("New x = %f, New y = %f", newx, newy);
}

编辑:添加了 f 后缀以确保我们不进行整数运算!