2017-09-05 88 views
0

我一直(失敗)試圖將2d座標網格的負座標轉換爲打算放置在數組中的線性索引。負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); 
    } 
} 

以上是我在做什麼之前我試圖使用負座標的簡化版本。

老實說,我不知所措。這似乎應該是非常簡單解決,但在這裏,我是一個堅實的2小時後不結果和大量的out_of_range例外:)

我想感謝所有幫助任何人都可以給我後覺得自己很笨。提前致謝!

+0

在訪問數組之前打印'20 * x + y'是個好主意,我猜。 –

+0

標準::地圖可以接受方括號中的負值。 (或其他散列類型之一) – 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