【问题标题】:Point in vertex defined box algorithm?顶点定义框算法中的点?
【发布时间】:2011-11-30 16:45:46
【问题描述】:

如果一个点位于仅由其 8 个点或由其 6 个四边形定义的 3D 框内,我将如何测试? (无法访问法线向量)

盒子由三角形组成,但每边的两个多边形是对齐的,所以可以被认为是一个四边形。

【问题讨论】:

标签: c++ algorithm geometry


【解决方案1】:

您可以通过形成 6 个方形金字塔来测试这一点,以您的点为头,每个四边形的 4 个顶点为底,然后将方形金字塔的体积相加。如果体积之和等于您的盒子的体积,则该点在盒子中。如果总体积大于您盒子的体积,则它在盒子外面(总体积永远不会小于盒子体积)。

为了计算每个方形金字塔的体积,您可以将其分成两个四面体,它们的体积可以通过mix vector product 轻松计算。您也可以使用混合向量积计算盒子的体积。

【讨论】:

    【解决方案2】:

    假设点有一个已知的顺序,你可以计算出法线向量。无需为此类测试对它们进行标准化,因此成本并不高。如果您已经知道它是一个长方体,那么您只需要计算出两个法线,因为您可以通过叉积获得第三个法线,然后使用其他点来获得距离。显然,无论如何您都是在进行交叉生产以获得法线,所以这更多的是关于您想向谁公开哪些信息的问题。

    如果这些点没有已知的顺序,那么您可能可以应用 QuickHull 的微型版本 — 从最初的三角形开始,您应该会发现您已经拥有一个真实的边缘面(在这种情况下,您可以使用该法线并在该法线的另一个极端找到相关点,再加上获得所有三个法线的相互正交性的要求),或者这一步可以为您提供至少两个真实边缘,当它们的局部点集时您会发现前面是空的。

    【讨论】:

      【解决方案3】:

      一个疯狂的想法,也许:-

      • 在 1x1 像素视口上设置 3d 正交投影
      • 设置相机和近剪裁平面,使兴趣点位于近剪裁平面上
      • 渲染盒子而不进行任何剔除
      • 如果只渲染一个像素,则点在框内,如果渲染 0 或 2 个或更多像素,则该点在框外

      【讨论】:

      • 我会说这是一个疯狂的想法 :) 我对这类事情的深度不够,但你的答案不是做更多的工作,然后有必要使用普通的方法来确定答案老数学?
      • 我想这取决于您已经拥有哪些光栅化设施可供您使用?它还提出了另一种线性代数方法——如果从点到无穷远的线段在任何方向上与盒子恰好相交一次,那么该点就在盒子内。如果进行光栅化,您可以通过裁剪和投影来执行该测试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2015-05-25
      相关资源
      最近更新 更多