我有一个均匀分布的 3D 网格的坐标 (x,y,z)。给定网格某处的随机 3D 点 (x,y,z),如何找到哪个立方体具有该点。我需要知道立方体的 8 个角。
我在 C++ 中的向量列表中有网格点数据。
谢谢。
我有一个均匀分布的 3D 网格的坐标 (x,y,z)。给定网格某处的随机 3D 点 (x,y,z),如何找到哪个立方体具有该点。我需要知道立方体的 8 个角。
我在 C++ 中的向量列表中有网格点数据。
谢谢。
假设所有维度的网格立方体的长度相等,您可以通过计算得到最接近 ohe origo 的坐标
gx = x - x%l;
gy = y - y%l;
gz = z - z%l;
其中gx
, gy
,gz
是最接近 origo 的网格立方体坐标(我假设x
, y
, z
>=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)
,您应该除以(x,y,z)
网格的大小。然后你应该将结果四舍五入并乘以网格的大小,即:
(nx, ny, nz) = [(x,y,z) / grid_size] * grid_size
其中[x]
是最大整数n
,因此n<=x
(在实践中,您应该将浮点运算的结果转换为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)