确定点是否在三维立方体中

本文关键字:三维 立方体 是否 | 更新日期: 2023-09-27 17:58:43

我需要最好的解决方案,如果可能的话,不是脏代码,而是一些智能代码。

我不熟悉三维编程。

我必须写一个函数,如果一个点在三维空间(x,y,z)中,它会返回。将提供立方体在空间中的范围(例如范围{{1,2,1},{5,6,4})

有什么想法吗?

确定点是否在三维立方体中

测试给定点是否具有位于点之间的所有坐标就足够了。因此,如果(x1,y1,z1)是最小角点,(x2,y2,z2)是最大点,为了测试点(x,y,z),验证x1<=x<=x2,并且对于y和z类似。

如果这看起来不明显,只需意识到,与坐标轴对齐的立方体是位于平面x=x1右侧、平面x=x2左侧、平面y=y1上方和y=y2下方的区域。立方体中的点是同时满足所有六个不等式的点。这正是你正在验证的。

如果立方体未与坐标轴对齐,则无法从两个角确定它。相反,它是通过给出确定六个面的平面的不等式来描述的。你需要检查一下六个人是否都满意。这总是可以写成矩阵不等式。在这种情况下,6x3矩阵:三列,因为点在三维空间中,每个约束一行。这是一般情况,但对于所述的问题来说,这是过分的。

当点的每个坐标都在x、y和z的相应范围内时,点p = (x, y, z)在具有扩展[x_0, x_1] x [y_0, y_1] x [z_0, z_1]的立方体内。这是在伪码中

  bool PointIsInCube( Point3D p, float x_max, float x_min, float y_max, float y_min, float z_max, float z_min)
  {
        return (p.x <= x_max && p.x >= x_min) && (p.y <= y_max && p.y >= y_min) && (p.z <= z_max && p.z >= z_min);
  }

对于给定的立方体,如果我读得正确的话,间隔将是[1,5]x[2,6]x[1,4]。(x的第一个区间,y的第二个区间,z的第三个区间)

例如,您可以计算3个投影(每个轴)。例如,如果你想对Z轴进行投影,你可以从点坐标中删除Z值:

 projection({1,2,3}) -> {1,2}

然后确定正方形内部的投影(点),它也是底部(或顶部)4个点的投影。对于ather轴也是如此。