2017-05-24 144 views
0

我正在使用ANSI C並希望將屏幕上的borland圖形座標(即(35,134))轉換爲網格座標(0,0)。我的網格創建功能如下:將屏幕座標轉換爲陣列網格座標

void createGrid(int ***a, int m, int n) 
{ 
    int i,j,color=0; 

    *a=(int**)malloc(sizeof(int)*n); //reserves memory for n 

    for(i=0;i<n;i++){ //external loop 
     *(*a+i)=(int*)malloc(sizeof(int)*m); //reserves memory for m 
    if(a){ 
     for(j=0;j<m;j++){ //internal loop 
      *(*(*a+i)+j)=color; 
      } 
     } 
    } 
} 

正如你所看到的,它是一個動態網格,我一直無法找到正確的轉換方法。我所能找到的是從數組(0,1)到單個索引的轉換方法。目前,我正在使用30X30的網格大小。我的鼠標遵循屏幕座標,我需要將這些座標轉換爲網格位置,以便可以存儲和讀取這種位置的顏色。

+0

第一個sizeof(int)是不是'sizeof(int *)'?請儘量避免成爲[三星程序員](http://wiki.c2.com/?ThreeStarProgrammer)。此外(雖然這裏的寬度=高度= 30)沒有辦法從參數名稱'm'和'n'告訴哪個是哪個。 –

+0

歡迎來到StackOverflow。 請製作[mcve]。一個MCVE應包含各種樣本輸入(說明所有方面)和期望的輸出。 如果您正在尋找調試代碼的幫助,請參閱https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch

+0

m = 30,n = 30每個單元的大小爲10個單元。我想出x是(index * cell size)+32其中32是座標(32,131)和(2 * 10)+32 = 52中的第一個x。 52是(2,0)的網格x座標。 。不幸的是,我一直無法找出y的公式。 –

回答

0

那麼,經過大量的閱讀和探索之後,我發現這個困境的答案是採用(座標數爲0之後的空格)/ size的單元格。在我以前的公式的情況下,它是(52-32)/ 10 = 2。此公式適用於x和y座標,以將它們轉換爲二維數組的i索引。

相關問題