環境
私は Python と numpy で作業しており、配列を使用して 3D 地形を表しています。配列の形状は ((0.0, 0.0, 0.0),terrainLength) で、terrainLength (この質問の目的では) は通常 400 です。(x,z) でアドレス指定しており、y は今のところ関係ありません。numpy でこれを行う最良の方法は、上記のように思われます: 長さ 3 の配列 (つまり、頂点) の 1 次元配列です。つまり、(x=5,y=?,z=10) の頂点を抜き出したい場合は、terrain_array[x*terrainLength+z]、つまり Terrain_array[2010] を参照する必要があります。
タイトルで言及されている「任意のベース」は TerrainLength です。1D numpy と 2D フラット グリッド参照を切り替える場合、numpy の座標系は、z が一番右の列で x が base-400 システムのようなものであると考えています次の左の列です。
質問
直感的な (x、?、z) 座標系と numpy の 1 次元座標系の間で変換する関数のペアを作成しています。前述のように、(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 - 「y 座標のみを含み、位置から x 座標と z 座標を想定する形状 ((0.0),3) の配列を持たない理由」を先取りするために、私はまだ地形を非常に書いていますシステムとそれはすでにあらゆる種類の大混乱を引き起こしています(たとえば、可変地形解像度の導入を困難にしました...)。