2011-07-02 19 views
0

私は二次元配列をシミュレートするために一次元配列を使用しています。座標計算の問題!

配列の高さが30項目、配列の幅が20項目の場合、項目の配置先の索引を検索するための形式は次のとおりです。

オフセット= X * 30 + yの

私はバックの位置にオフセットに変換する方法を、これと同じ情報を、与えられましたか?私はそれが可能であることを知っている。私はちょうどそれを行う方法について考えることができません。

+0

_due _...あなたは、この点について詳しく説明できますか? AFAIK、C#は本質的にあなたが記述する同じタイプの算術演算にコンパイルされます(より効率的な方法でこれを行うだけです)。 – mjv

答えて

3
int x = offset/30; 
int y = offset % 30; 
+1

@Mathiasあなたの定義を切り替えました!質問によれば、オフセット= 30 * x + y。したがって、x:11とy:3の場合、オフセット= 30 *(11)+ 3 == 333,333/30 == 11,333%30 == 3 – dlev

1

除算とモジュロを使用してこれを行うことができます。

私はあなたがこれをもちろん使っているのか分かりませんが、読みやすさがパフォーマンスをはるかに上回っていると考えてください。 経験則:実際に速度の問題がある場合にのみ最適化します。

実際にがパフォーマンスを心配するである場合は、アレイの空間的局所性を再考してください。すべての要素をループして実行する場合は、行ではなく列で行います。 あなたはその方向に配列を整理しています。

私は行(心の中で可読性と保守性)でそれをやっただろう。そうすることの性能向上に

offset = y * 20 + x 
+0

あなたはパフォーマンスに関して間違っていると思います。私は本当に低い仕様のPCで動作する必要があるゲームを作っています。それは信じられないほど速くなければならず、毎秒何千ものこれらのことを行わなければなりません。 –

+0

@マティアス・リケケゴール・ロレンツェン:_信じられない_スタート_asserting_。単純なタイミングテストやより洗練されたプロファイリングツールは、実際のパフォーマンスのボトルネックが存在することを示すはずです。 '時期尚早最適化'について聞いたことがありますか? – mjv