我有一个均匀间隔的3D网格的坐标(x,y,z)。给定网格上某处的随机3D点(x,y,z),如何找到哪个立方体具有该点。我需要知道立方体的8个角落 我在c ++中的向量列表中有网格点数据。
感谢。
答案 0 :(得分:1)
假设所有维度中网格立方体的长度相等,您可以通过计算得到最接近原点的坐标
gx = x - x%l;
gy = y - y%l;
gz = z - z%l;
gx
,gy
,gz
是最靠近原点的网格立方体坐标(我假设为x
,y
,{{1 }}> = 0这里),z
是模数运算符,%
是网格立方体的长度。
注意:您也可以通过这种方式执行计算:l
(gx = 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)