4x4タイルのグリッドがあります。各タイルは5×5ピクセルです。どのように私はこのグリッドの1次元配列を作成し、適切にタイルの座標を設定する(私が指定している座標は2次元配列の行と列とは異なります)?たとえば、1d配列を作成した後、インデックス4のタイルの座標は(0,5)です。xとy座標の2dグリッドの1d配列を作成します(xとyは2dグリッドの行と列を参照しません)
答えて
w
とh
のグリッドがあり、各タイルはサイズn
の正方形であるとします。最初に考慮する必要があるのは、各タイルの左上隅(または座標系の向きに応じて左下隅)の座標です。最初のタイルが(0,0)
で開始し、各タイルが広いn
画素とn
画素であるので、同じ行の次のタイルが(n,0)
、(2*n, 0)
の座標を有することになる
を(私は(0,0)
として左上隅を使用する)··· ((w-1)*n, 0)
。これはすべての次の行にも適用されます。次の行のYオフセットはn
ピクセルなので、開始座標が((w-1)*n, (h-1)*n)
の最後のタイルに到達するまで、その座標は(0,n)
,(n,n)
,(2*n, n)
などの形式になります。
次に、2Dアレイを1Dアレイに変換する方法を知る必要があります。このため 、2Dおよび1D-アレイのインデックスが関連している方法を検討:
2D-Array:
0: [0,1,2,3]
1: [0,1,2,3]
2: [0,1,2,3]
3: [0,1,2,3]
を1D-アレイでは、同じことがこのようになります。
1D-Array:
[(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3)]
の最初の行を2D-Arrayはインデックス0-3
に、次の行はインデックス4-7
に、第3行はインデックス8-11
に、第4行はインデックス12-15
にそれぞれフィットします。各インデックスは、現在のrowIndexの4 (the size of a row)
倍から始まり、現在のcolumnIndexによってオフセットされています。
だから対応する1D-指数(注:これは、各行が要素の同量を有する長方形の2次元アレイ、のためにのみ機能)を計算するために、次の式を適用することができ
oneDIndex = (rowSize * rowIndex) + columnIndex;
を2D-アレイの(1,1)
のためにそれをテストします。
oneDIndex = (1 * 4) + 1 // == 5
そして、あなたが見ることができるよう、1D-アレイのインデックス5
は含みません値(1,1)
。あなたは次のコードで、1D-アレイに2D-配列を翻訳することができ意味
:
for(int y = 0; y < twoDArray.length; y++) {
for(int x = 0; x < twoDArray[y].length; x++) {
int oneDIndex = (twoDArray[y].length * y) + x;
oneDArray[oneDIndex] = twoDArray[y][x];
}
}
すべてのことが残っていますが、これらの二つのアイデアを組み合わせることです。そのためには、各グリッドタイルの左上隅を対応する2Dインデックスにマップし、上記のコードスニペットを使用して1D配列に挿入する必要があります。
マッピングは次のコードで行うことができます:
gridCoordinate.x = tileCoordinate.x/tileSize;
gridCoordinate.y = tileCoordinate.y/tileSize;
グリッドサイズ4*4
とタイルサイズ5*5
を使用して特定の問題を考慮すると、座標(5,5)
でタイルを取ります。これを上記のコードスニペットに挿入すると、グリッド座標は(1,1)
になります。 5ピクセル右と5ピクセル下に行くことができ、そのグリッドインデックスでタイルの内側にいるので、これは正しいです。
一緒にすべてを置く:
- マッピングタイルは、グリッドに座標は
- 使用グリッドにおける1D-アレイにそのタイルのオブジェクトを入れて1次元アレイ
- のインデックスを計算する座標座標あなたは1D-インデックスを持っていて、対応する2D-インデックスをしたい場合、あなたは次の操作を行うことができ、
逆に指数計算:
twoDYIndex = oneDIndex/gridSize;
twoDXIndex = oneDIndex % gridSize;
1D配列のインデックス4
の要素を(質問に記載されているように)欲しいとしましょう。
twoDYIndex = 4/4 // == 1
twoDXIndex = 4 % 4 // == 0
だからあなたの2次元配列では、これは、所望のよう(0,5)
座標にある、グリッドの要素(0,1)
あろう。
私はプログラミングでアマチュアなので、私が間違っている場合は私を許してください。 QBruteが上記の答えに誤りがあると思います。 8月30日'16 長方形配列が関与している場合、それは唯一の4×4 すなわち正方形アレイを考慮するので、それは私がラインoneDIndex = (rowSize * rowIndex) + columnIndex
がoneDIndex = (columnSize * rowIndex) + columnIndex
- 1. グリッドにボタンを生成して配置し、x、y座標で参照する
- 2. パイソン - ビニングのx、yは、2Dグリッド
- 3. 2D配列、出力xとグリッド
- 4. 入力要素は、マウスクリックのx座標とy座標を生成します。
- 5. 2D配列と座標
- 6. make_heapとソートxとyの座標
- 7. 2D配列の座標ペアの1D配列の整数インデックスを返します
- 8. XとY座標による行列値へのアクセス
- 9. xとyの座標系の分離
- 10. フォームのグリッド線を表示し、デザイン時にx座標とy座標を取得する
- 11. JavaFX:ImageViewでxとyのピクセル座標をクリックします。
- 12. 右のコールアウトボタンのX座標とY座標が正確に自分のビューを配置していません
- 13. X座標系とY座標系を混在させる
- 14. 配列内のオブジェクトのx、y座標を取得する
- 15. mouseClickのx座標とy座標を取得する方法
- 16. const 2D配列のmy_2D_Array [x] [y](double演算子[])をサポートしています。
- 17. xとyの位置は、この配列には何のxとy
- 18. x、y座標のリストにマスク(boolean)配列を変換する
- 19. x/y座標のソートベクトル
- 20. X座標とY座標を使用して要素を配置する
- 21. recylcerView内のX座標とY座標を取得
- 22. ボタンをクリックしたときのX座標とY座標の更新
- 23. ImageViewでタップしながらX座標とY座標を取得します
- 24. javascriptを使用して配列内の特定のオブジェクトからx座標とy座標を取得する
- 25. PHPの配列のx座標とy座標を最も効率的に並べ替えますか?
- 26. Photoshopのマウス位置のx座標とy座標
- 27. PointCollection(C#)のX座標とY座標の最小値
- 28. APPIUM、スワイプのx座標とy座標の取得方法
- 29. 文字列からX座標とY座標を抽出する
- 30. 負のX、Y線形配列インデックスの座標?
それを上に描画されるべきだと思う、それは を失敗します(×4 6)作品あなたが望むもののアイデアを得ることができます。その後、それは明らかになります。 – Andreas
なぜ1Dアレイを使用するのですか?それぞれの 'Tile'のx座標とy座標が配列インデックスの関数である' Tile'オブジェクトの2D配列を作ることができます。私が何を言っているのか分からない場合は、答えにさらに助けを求めることができるので、説明を求めてください。 –