1

我有一个均匀分布的 3D 网格的坐标 (x,y,z)。给定网格某处的随机 3D 点 (x,y,z),如何找到哪个立方体具有该点。我需要知道立方体的 8 个角。
我在 C++ 中的向量列表中有网格点数据。

谢谢。

4

2 回答 2

2

假设所有维度的网格立方体的长度相等,您可以通过计算得到最接近 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)
于 2012-05-09T19:51:27.337 回答
0

假设网格的原点在(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)
于 2012-05-09T19:54:17.827 回答