2017-05-24 19 views
0

私はANSI Cを使用しており、ボーランドのグラフィックス座標(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 *)'であってはなりませんか?そして、[3-starプログラマー](http://wiki.c2.com/?ThreeStarProgrammer)であることを避けてください。さらに(ここではwidth = height = 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単位です。私は、座標(32,131)と(2 * 10)+ 32 = 52の最初のxが32で、xが(index * cell size)+32であると考えました。 52は(2,0)のグリッドx座標です。 。残念ながら、私はyの式を理解することができませんでした。 –

答えて

0

多くの読書と探索の後、私はこのジレンマに対する答えが(0の後のスペースの座標数)/セルのサイズを取っていることを発見しました。私の以前の公式の場合、それは(52-32)/ 10 = 2です。この式は、x座標とy座標の両方で、2次元配列のインデックスをi & j個のインデックスに変換します。

関連する問題