将坐标转换为像素坐标
我正在寻找一种有效的方法来将多个屏幕分辨率的坐标转换为像素坐标。将坐标转换为像素坐标
例如,如果有值的数据集的温度随着时间的推移,这样的:
int temps[] = {-8, -5, -4, 0, 1, 0, 3};
int times[] = {0, 12, 16, 30, 42, 50, 57};
什么是数据集转换为像素最有效的方式坐标,以便我能画一个800x600的屏幕上的图形。
假设你打算从TEMP_MIN
到TEMP_MAX
,只是做:
y[i] = (int)((float)(temps[i] - TEMP_MIN) * ((float)Y_MAX/(float)(TEMP_MAX - TEMP_MIN)));
其中#define Y_MAX (600)
。对于x坐标也是如此。这没有经过测试,因此您可能需要稍微修改它才能正确处理边缘案例(temps[i] == TEMP_MAX
)。
首先需要确定沿每个轴的最大值和最小值。然后你可以这样做:
x_coord[i] = (x_val[i] - x_max) * X_RES/(x_max - x_min);
...和Y相同(尽管你可能想要反转Y轴)。
您可能需要以浮点的方式做到这一点,以实现正确的准确性(如我的答案),并避免溢出问题。 – 2010-09-30 13:57:05
@Oli:是的,可以通过将'X_RES'设置为像'800.0'这样的浮点常量来实现。 – caf 2010-09-30 14:09:09
...但这个例子的温度低于0 ... – caf 2010-09-30 13:50:49
@caf:好点;现在修改答案...... – 2010-09-30 13:51:17