2017-05-24 129 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索引。

相关问题