语境
我正在使用 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 坐标”,我仍然在写地形系统,这已经造成了各种破坏(例如,难以引入可变地形分辨率......)。