检查2d点是由点矢量定义的轮廓的哪一侧

时间:2017-06-02 20:23:58

标签: algorithm vector geometry line contour

我有一个由点矢量定义的轮廓,即我有一个矢量(x_i,y_i)。

现在给出任何一点(a,b)是否有一种快速的方法来确定(a,b)是否与原点(0,0)位于同一侧?

定义轮廓的矢量是大约7000点的矢量。因此,逐点确定可能非常缓慢。如果有人可以提供任何指示,那将是非常友好的。

(我正在使用visual C ++进行计算)

提前致谢。

1 个答案:

答案 0 :(得分:0)

我知道允许预处理(否则你无法避免“逐点”程序)。

一种简单的方法是扫描折线以单调部分对其进行分解,即通过增加或减少x来显示顶点。这需要线性时间。

然后,当您想要将一个点与折线进行比较时,将其与每个单调部分进行独立比较,并通过二分法搜索找到它所面对的x间隔。对于长度为m的部分,此操作需要Log m次。当您知道间隔时,您可以立即告诉您所在的部分的哪一侧。

对所有部分重复并计算“下面”的数字,其奇偶校验为您提供答案。

对于长度为s Log m的{​​{1}}部分,此过程需要s次(基于几何平均值)。这不是最坏情况的最佳情况,但很简单,并且在大多数情况下表现得非常好。

enter image description here