2011-11-30 68 views
3

我如何测试一个点是否在由其8个点或其6个四边形定义的3D框内? (无权访问正常向量)顶点定义框算法中的点?

框由三角形组成,但每边的两个多边形都对齐,因此可以视为四边形。

+0

你有没有试过在[数学](http://math.stackexchange.com/)上问这个问题? –

回答

1

您可以通过形成6个方形金字塔来测试该方法,其中您的点为头部,每个四边形的4个顶点为底部,然后总计四角锥体的体积。如果数量的总和等于您的箱子的体积,则该点位于箱子中。如果音量总和大于您的盒子音量,那么它在盒子外(音量总和永远不会小于盒子音量)。

要计算每个正方形金字塔的体积,可以将它分解为两个四面体,其体积可以通过mix vector product轻松计算。你也可以用混合矢量产品计算盒子的容量。

1

假设点有一个已知的顺序,你可以计算出法向量。这种测试不需要标准化,所以成本并不高。如果您已经知道这是一个长方体,那么您只需要计算两个法线,因为您可以用十字产品获得第三个法线,然后使用其他点来计算距离。显然你是交叉产生以获得法线,所以这更多的是关于你想向谁揭露什么信息的问题。

如果点没有已知的顺序,那么你可以应用QuickHull的微缩版本 - 从最初的三角形开始,你应该发现你已经有一个真正的边缘面(在这种情况下,你可以使用该法线并在该法线的另一个极端找到相关点以及相互正交的要求以得到所有三个法线),或者一步给出至少两个真实的边缘,当它们的局部集合前面的点变空了。

0

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

  • 组建3D正投影上1x1像素视
  • 设置相机和近剪裁平面这样的的关注点是在近剪裁平面
  • 呈现框而没有任何背景拣出
  • 如果只有一个象素被渲染然后点是盒子,0或2或更多个像素渲染然后内部的点是框
+0

我会说这是一个疯狂的想法:)我在这种事情上我的深度,但不是你的答案做更多的工作,然后有必要确定答案使用普通的旧数学? –

+0

我想这取决于你有什么设施可以让你进行光栅化处理?它还提出了另一种线性代数方法 - 即如果从任何方向上的点到无限的线段恰好与盒子相交一次,则该点在盒子内。如果光栅化,则通过裁剪和投影来执行该测试。 – Tommy