检查一个点是否在4点凸包内

时间:2014-10-16 18:21:07

标签: algorithm geometry computational-geometry

我有一个问题需要证明,如果4个点可以形成一个凸包,如果第5个点是否在船体内部。我设法使用三角形来解决凸包的问题,​​但是我不知道如何证明第5点是否在其他4点所创建的船体内部。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

假设您要询问飞机上的点 - 对于任何具有任意数量顶点的多边形(凸或不凸)都有standard approach

答案 1 :(得分:0)

拨打你的积分a,b,c,d。它们形成四面体。 如果四面体不退化,则这些点是其凸包的顶点(极值点)。

要检查这一点,请检查a,b,c是否形成非退化三角形。为此,计算三角形(b-a)交叉(c-a)的法向量(称为n)。如果它为零则三角形退化,否则它不是.. 检查d是否不在此三角形的平面内。如果(d-a)点积与n为零。如果是这样,四面体就会退化。

计算四面体的4个三角形中的每一个的法线向量。 每个法向量与三角形的(任意)点一起描述半空间; 也就是说,飞机一侧的所有点。 设n是法线向量,p是三角形的一个点。

如果n点(q - p)为负,则称q点在半空间内。

检查所有4个三角形,如果第四个点在里面。如果没有,请调整法线向量的符号。

如果四面体位于所有4个半空间的内部,则该点位于四面体内部。

答案 2 :(得分:0)

如果你能够找到四个点的凸包,那么你可以用对角线将四边形分成两个三角形(除非其中一个点是内部的,那么你剩下一个三角形)。 / p>

所以这一切都相当于三角形测试。

同样,能够构造一个凸包,你必须已经方便区域测试(三角形区域的标志)。当区域测试报告由点和给定三角形的三条边形成的三个三角形的相同符号时,第五个点位于给定三角形内。