2017-09-05 10 views
0

2次元座標グリッドの負の座標を、配列内に配置するための線形インデックスに変換しようとしましたが、失敗しました。負のX、Y線形配列インデックスの座標?

std::vector<float> heights(20*20); 
for (int x = -10; x < 10; x++) { 
    for (int y = -10; y < 10; y++) { 
     heights[20*x + y] = NoiseGenerator.GetPerlinFractal(x, y); 
    } 
} 

上記の私は負の座標を使用しようとしました前に、何をやっていたの簡易版です。

正直、私は迷っています。それは解決することが極めて簡単でなければならないようにこれはそうですが、ここで私は任意のヘルプ誰もが私を与えることができ感謝しout_of_range例外の無い結果とたくさんの固体2時間:)

後に愚かな感じてい。前もって感謝します!

+0

アレイにアクセスする前に '20 * x + y'を表示するとよいでしょう。 –

+0

std :: map は、ネガを大括弧で囲むことができます。 (または他のハッシュタイプのうちの1つ) – titapo

+2

@titapoパフォーマンス要件について最初に質問していないのは恐ろしいアドバイスです。 'std :: map'は' log(n) 'アクセスの複雑さを持っています。 –

答えて

1

heights[(x - x_min) * rows + (y - y_min)]

ここx_miny_min両方-10であり、そしてrowsは、各次元に20点を許すようx_maxy_maxの両方、9となること20.

注あります。 21はより対称的だったでしょう。

ベクトル内のindexからxyを復元するには、整数除算と%を使用する必要があります。

+0

これは正しく動作します。ありがとうございました! – HaedHutner

関連する問題