2017-09-05 92 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