确定Point是否在3D多维数据集中

时间:2016-07-26 11:51:17

标签: c# point

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

我不熟悉3D编程。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

当每个点的坐标都在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的第三个间隔)

答案 2 :(得分:0)

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

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

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