2012-05-09 21 views
1

等間隔の3Dグリッドの座標(x、y、z)を持っています。グリッドのどこかにランダムな3D点(x、y、z)が与えられている場合、その点を持つ立方体を見つける方法。私は立方体の8つのコーナーを知る必要があります。
私はベクトルのリストに格子点データを持っています。3Dグリッド内にランダムな点を持つ立方体のコーナーポイントを見つける

ありがとうございました。

答えて

1

すべてdimentionsのグリッドキューブの等しい長さを仮定すると、あなたは(I gxは、gygzがグリッドキューブです

gx = x - x%l; 
gy = y - y%l; 
gz = z - z%l; 

がオリゴに最も近い座標計算することにより、オリゴを大江に最も近い座標を取得することができますここではxyz> = 0と仮定)、%はモジュラス演算子で、lはグリッドキューブの長さです。

注:同様の計算をこのように行うことができる。gx = static_cast<int>(x)/l*l;static_cast<>が非整数xを考慮して)

その後に落下(x, y, z)グリッド立方体の8つのコーナーである:

(gx, gy, gz) 
(gx+l, gy, gz) 
(gx, gy+l, gz) 
(gx, gy, gz+l) 
(gx+l, gy+l, gz) 
(gx+l, gy, gz+l) 
(gx, gy+l, gz+l) 
(gx+l, gy+l, gz+l) 
0

グリッドの起点が(0,0,0)であると仮定すると、(x,y,z)をグリッドのサイズで除算する必要があります。 は、その後、あなたが結果を丸めると、グリッドのサイズを掛けなければならない、それは次のようになります。

n<=xは(実際には、あなただけの浮動小数点の結果をキャストする必要がありますように [x]が、最大の整数 nある
(nx, ny, nz) = [(x,y,z)/grid_size] * grid_size 

操作をintに送信する)。検索するポイントは次のとおりです。

(nx, ny, nz) 
(nx+grid_size, ny, nz) 
(nx, ny+grid_size, nz) 
(nx, ny, nz+grid_size) 
(nx+grid_size, ny+grid_size, nz) 
(nx+grid_size, ny, nz+grid_size) 
(nx, ny+grid_size, nz+grid_size) 
(nx+grid_size, ny+grid_size, nz+grid_size) 
関連する問題