物体内部的3D点

3D Point inside object

本文关键字:3D 内部      更新时间:2023-10-16

我已经搜索和搜索了这个问题,但我不能真正理解我找到的任何答案。我的问题很简单:

有一个网格(由三角形构建的3D非凸多边形),我扫描空间(xyz),我需要找到网格"内部"的所有点,以便稍后处理。我再说一遍,我看过很多关于这个问题的答案,但我不能理解它们。

有人来帮忙吗??

我假设你正在试图找出一个给定的点是否在一个网格内(否则,显然有无限数量的点)。

一个简单的解决方案是从该点(向任何方向)投射一条射线,并计算与它相交的三角形相交的数量。如果数是奇数,则点在里面。当光线碰到一条边或一个顶点时,必须注意将其算作一个交点。射线与三角形的相交是通过直线与平面相交来完成的,检查该点属于射线并且在三角形内。

检查每个点,看看它是否在网格内将工作,但我们可以从性能的角度做得更好。你目前的方法将在O(x*y*z*t)中运行,因为点的网格是x × y × z,网格有t个面。

另一种方法,将在O(x*y*t)中运行,是考虑穿过网格的网格线——找到线和网格之间的交点。交点的个数应该是偶数。一旦这些交点被排序,它们就定义了位于网格内部的线的区域。然后就可以很容易地生成直线上位于这些区域内的点。

大致(假设网格位于单位立方体内):

for each X in [0,1] {
  for each Y in [0,1] {
    Let P be a list of points of intersection between the mesh and the line from (X,Y,0) to (X,Y,1)
    Sort P into ascending order of z-coordinate
    Let I be false
    for each Z in [0,1] {
      if Z > P[0] {
        I = !I
        pop P[0] off the list
      }
      if( I ) {
        point (X,Y,Z) is inside the mesh
      }
    }
  }
}