我试图将X和Y屏幕坐标转换为-1.0的浮点范围,以1.0。如何将X和Y屏幕坐标转换为-1.0,1.0浮点数? (在C)
(-1,-1为0,0,如果分辨率为640×480,1,1是640,480。0,0是320240 ......的中心。)
我将如何处理这?我做了几次徒劳的尝试,而且我不完全是数学上的倾向。
我试图将X和Y屏幕坐标转换为-1.0的浮点范围,以1.0。如何将X和Y屏幕坐标转换为-1.0,1.0浮点数? (在C)
(-1,-1为0,0,如果分辨率为640×480,1,1是640,480。0,0是320240 ......的中心。)
我将如何处理这?我做了几次徒劳的尝试,而且我不完全是数学上的倾向。
下面是一些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方向:
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)
outx =(X-320)/ 640; outy =(Y-240)/ 480; – Cobusve
@Cobusve或'OUTX =(X-320)/640.0f;' – chux