0

语境

我正在使用 Python 和 numpy,使用数组来表示 3D 地形。该数组的形状为 ((0.0, 0.0, 0.0),terrainLength),其中terrainLength(出于此问题的目的)通常为 400。我正在通过 (x,z) 寻址,而 y 目前无关紧要。似乎在 numpy 中做到这一点的最好方法是如上:长度为三个数组(即顶点)的一维数组。这意味着如果我想拉出 (x=5,y=?,z=10) 处的顶点,我必须参考terrain_array[x*terrainLength+z] 即terrain_array[2010]。

标题中提到的“任意基数”是terrainLength:我认为numpy的坐标系,如果我在1D numpy和2D平面网格参考之间切换,就像有一个base-400系统,其中z是最右边的列和x是下一个左列。

问题

我正在编写一对函数来在直观的 (x,?,z) 坐标系和 numpy 的一维坐标系之间进行转换。如上所述,如果我想在(x=5,y=?,z=10) 处拉出顶点,我必须参考terrain_array[x*terrainLength+z] 即terrain_array[2010]。似乎我的函数将受益于 / 和 % 的使用,但我想知道这是否是最佳实践,假设正整数坐标:

def toGridCoords( matrix_index ):
    global terrainLength
    return floor(matrix_index/terrainLength), matrix_index%terrainLength

def toArrayCoord( x, z ):
    global terrainLength
    return x*terrainLength+z

谢谢!

PS-为了抢占“为什么没有一个形状数组 ((0.0),3),它只包含 y 坐标并从位置假定 x 和 z 坐标”,我仍然在写地形系统,这已经造成了各种破坏(例如,难以引入可变地形分辨率......)。

4

2 回答 2

0

您正在尝试做的事情应该可以正常工作。您对 floor、/ 和 % 的使用是这类事情通常的处理方式。

避免全局变量通常是首选,但如果这是一次性项目,那应该不是问题。

于 2013-04-30T20:02:15.457 回答
0

我想我正在寻找同样的东西(如果我正确理解了你的问题)。如果是这样,您可以使用 numpy unravel_index

于 2015-07-15T16:23:34.360 回答