上下文
我正在使用Python和numpy,使用数组来表示3D地形。该数组的形状为((0.0,0.0,0.0),terrainLength),其中terrainLength -对于本问题的目的-通常是400。我的地址是(x,z),而y现在无关紧要。似乎在numpy中实现这一点的最好方法是:一个长度为3的数组(即顶点)的一维数组。这意味着如果我想拉出(x=5,y=?,z=10)处的顶点,我必须引用terrain_arrayx*terrainLength+z,即terrain_array2010。
标题中提到的“任意基”是terrainLength:我认为如果我在1Dnumpy和2D平面网格参考之间切换,numpy的坐标系就像有一个base-400系统,其中z是最右边的列,x是下一个左边的列。
问题
我正在编写一对函数,用于在直观的(x,?,z)坐标系和numpy的一维坐标系之间进行转换。如上所述,如果我想拉出(x=5,y=?,z=10)处的顶点,我必须引用terrain_arrayx*terrainLength+z即terrain_array2010。看起来我的函数将从/和%的使用中受益,但我想知道这是否是最佳实践,假设是正整数坐标:
def toGridCoords( matrix_index ):
global terrainLength
return floor(matrix_index/terrainLength), matrix_index%terrainLength
def toArrayCoord( x, z ):
global terrainLength
return x*terrainLength+z谢谢!
为了先发制人,“为什么没有一个只包含y坐标的形状数组((0.0),3),它只包含y坐标,并从位置假设x和z坐标”,我仍然在编写地形系统,这已经造成了各种各样的破坏(例如,难以引入可变的地形分辨率...)。
发布于 2013-05-01 04:02:15
您正在尝试做的事情应该可以很好地工作。您可以使用floor、/和%,这类操作通常都是这样做的。
避免全局变量通常是首选的,但如果这是一个一次性的项目,应该不会有问题。
发布于 2015-07-16 00:23:34
我想我在搜索同样的东西(如果我正确理解了你的问题)。如果是这样,您可以使用numpy unravel_index
https://stackoverflow.com/questions/16306485
复制相似问题