如何将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方向:
- 屏幕坐标
0
对应-1.0
.
- 屏幕坐标
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 后缀以确保我们不进行整数运算!
我正在尝试将 X 和 Y 屏幕坐标转换为 -1.0 到 1.0 的浮点范围。
(-1,-1 为 0,0,如果分辨率为 640x480,则 1,1 为 640,480。0,0 为 320,240...中心。)
我将如何处理这个问题?我做了几次徒劳的尝试,而且我不太擅长数学。
X方向:
- 屏幕坐标
0
对应-1.0
. - 屏幕坐标
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 后缀以确保我们不进行整数运算!