我正在尋找一種有效的方法來將多個屏幕分辨率的座標轉換爲像素座標。將座標轉換爲像素座標
例如,如果有值的數據集的溫度隨着時間的推移,這樣的:
int temps[] = {-8, -5, -4, 0, 1, 0, 3};
int times[] = {0, 12, 16, 30, 42, 50, 57};
什麼是數據集轉換爲像素最有效的方式座標,以便我能畫一個800x600的屏幕上的圖形。
我正在尋找一種有效的方法來將多個屏幕分辨率的座標轉換爲像素座標。將座標轉換爲像素座標
例如,如果有值的數據集的溫度隨着時間的推移,這樣的:
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