因此,我将尝试详细描述问题,并且我希望对我用来解决问题的过程的有效性和性能进行一些批评。我主要担心的是有效性,我似乎无法证明这一点。
我们的想法是在3D空间中有一个2D多边形(由其所有船体点描述。每个点还有一个 normal 向量,表示无限挤压。我为使用误导性术语' normal',它只是一个归一化向量,表示与此算法无关的更广泛背景中的法线。为了完全澄清,这些向量既不垂直于平面也不相同每个点。如下图所示,矢量是红线:
这意味着此挤出的侧面不会形成平面,而是形成倾斜的平面。可以看一下它的挤出边,如偏斜多边形(http://en.wikipedia.org/wiki/Skew_polygon)。
无论如何,我想看看点P是否在挤出内部。我目前的程序如下:
我的方法是使用我认为必要的和足够的假设,但我无法证明最后一部分(必要部分是显而易见的)。我提出以下要求:
对于由点A-> Z和另外的共面点P组成的共面凸包。当且仅当对于所有时钟顺序点A和B以及其他一些第三时,P在凸包内。顺序点C线CP在通过线AB之前经过P.
在上面的示例图片中:A' -B'在A' -B'之前,D' -P穿过P,对于B' -C'这是通过A'来实现的,对于C' -D'也是由A'并为D' -A'由B'。
我将这个想法实现为两条3D参数线相互交叉(A-B和P-C)并查看参数的符号。 P-C中的参数应为非正数,因为交叉点应位于P后面,以便参数转到C.
本质上,这将导致 O(n) O(n ^ 2)算法,其中n是多边形的#points(这似乎超过了所有解决方案I&#39到目前为止已见过)。然而,即使我找不到上述假设的反例,我也无法证明这一点。
编辑:我相信有可能证明足够的条件是A和B,所有其他船体点需要满足假设(而不仅仅是C)。
Edit2:澄清声明。