2014-01-24 62 views
0

我正在用C語言編寫一個程序(使用allegro lib),它顯示txt文件中的點(我可以說一些序列)(兩列X & Y)。這些是浮點,它們可以小於零。窗口大小爲800x600。由於我們知道x的值從左到右增加,但y從上到下增加。我在聲明變量和縮放時遇到了很大的問題。以下是我遇到的一段代碼:如何聲明x和y的值以正確顯示它(也可以縮放)?

數組col1由X值組成,col2由Y值組成。我用qsort對它們進行排序,然後得到最小值和最大值。然後我宣佈高度和窗口和規模的寬度..

float x_max, x_min, y_max, y_min; 
     x_max=(col1[(n-1)]); 
     x_min=(col1[0]); 
     y_max=(col2[(n-1)]); 
     y_min=(col2[0]); 

     int height, width; 
     height=600; 
     width=800; 

     float x_scale, y_scale; 
     y_scale = height/(fabsf(y_max)+ fabsf(y_min)); 
     x_scale = width/(fabsf(x_max)+ fabsf(x_min)); 

現在我重新打開txt文件,並創建不排序列col1和COL2陣列。現在我聲明xpn和ypn從數組中獲取x或y的值,然後我按比例將其更改並最終我想要顯示它,但是..並非所有都顯示,並且它們都顯示爲錯誤。我使用abs和fabsf,其糟糕的我知道..

你能幫我這個代碼,宣言的X和Y的價值觀和縮放它們?我已經試過幾乎所有的東西,它不工作提前... THX :)

float xpn, ypn; 
int xpoint, ypoint; 

hline(screen, 5, 300, 795, makecol(0, 0, 0)); 
vline(screen, 400, 5, 595, makecol(0, 0, 0)); 

     for(i=0;i<n;i++) 
     { 
     float xpn, ypn; 
     xpn=fabsf(col1[i]); 
     ypn=fabsf(col2[i]); 

     int xpoint, ypoint; 
     xpoint=abs(xpn*x_scale); 
     ypoint=abs(ypn*y_scale); 

putpixel(screen,xpoint,ypoint,makecol(0,0,0)); 
+0

實際的問題是什麼?你得到了什麼,它是如何錯誤的? – RustyH

+0

我有小於零的點數,所以我必須將我的窗口分成4個部分。 – user3233915

+0

我仍然真的不明白這個問題,但如果你有任何理由小於零的點,如果他們只負面下降到一半的屏幕尺寸(即時猜測,因爲你說4部分),你可以在技術上增加一半屏幕寬度x和屏幕高度y的一半。仍然真的不明白的問題或爲什麼你會有負數開始 – RustyH

回答

0

聽起來像是從你最後的評論,你只需要添加300和+400?

xpn=fabsf(col1[i]); 
ypn=fabsf(col2[i]); 

變化

xpn=col1[i]+400; 
ypn=col2[i]+300; 

,你不會需要得到ABS值的方式應該是積極的。

的y值從正在交換你希望他們嘗試

ypn=-col2[i]+300; 

這將負切換到正,反之亦然

不完全確定的比例..不知道你是怎麼試圖縮放...

+0

我已經改變了它,但看看我的縮放聲明,它給出了例如等於40的值,並且然後我通過縮放xpn和ypn。在xpn中我有+ 400,如果我把它乘以40它對於我的窗口來說太多了..當涉及到縮放時,我只是想調整x和y的最大值和最小值到我窗口的大小,因此我分高度和寬度......) – user3233915

+0

我顯示積極cooridinates點沒有問題。問題出現時,顯示點與正面和負面座標.. – user3233915

+0

我做到了!我只是putpixel函數中的一些像素,之前我已經將窗口的參數(高度和寬度)除以4(因此對於縮放窗口是200x150);)但是在putpixel函數中,我將(xpoint + 400),(300-ypoint) :)問題解決了:D im我爲自己感到自豪:d – user3233915