查找在3D网格中具有随机点的立方体的角点

时间:2012-05-09 19:43:31

标签: c++ vector grid cube coordinate

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

感谢。

2 个答案:

答案 0 :(得分:1)

假设所有维度中网格立方体的长度相等,您可以通过计算得到最接近原点的坐标

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

gxgygz是最靠近原点的网格立方体坐标(我假设为xy,{{1 }}> = 0这里),z是模数运算符,%是网格立方体的长度。

注意:您也可以通过这种方式执行计算:lgx = static_cast<int>(x)/l*l;代表非整数static_cast<>

然后网格立方体x的8个角落落入:

(x, y, z)

答案 1 :(得分: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)