我正在尝试创建一个地图,用户可以在其中勾勒出他们想要的任何形状。但我遇到的问题是,用户可以选择使多边形线交叉的点,并排除我想要包含的区域。
要查看我正在谈论的内容,请转到this page并执行以下步骤:
答案 0 :(得分:2)
它不是凸包。
想象一下,如果你在“Linfield Oaks”停靠这两条线的交叉处。凸壳将跳过这个并在“国际”和“82”之间划出一条直线
您要做的是确定每个新点是否位于由现有点形成的多边形内部 - 如果是,则需要断开最近的多边形边并在该边中插入新点。 有关多边形测试中的点,请参阅http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm。
答案 1 :(得分:1)
凸包可能包含用户希望排除的区域。这是另一种方法,可以提供更令人满意的结果。检查每一行以查看哪些交叉(有很多方法可以做到这一点)。然后反转出现在这两行之间的点的子序列。
例如,假设您给出了点A-B-C-D-E-F-A,其中B-C和E-F交叉。您可以通过反转子序列C..E来删除它们,从而产生A-B-E-D-C-F-A。
无论如何都要尝试。
答案 2 :(得分:1)
我在过去解决了类似的问题,并遇到了Jeffrey提到的关于不确切知道用户期望的形状的问题。我最终通过要求用户选择他们想要新点之间的两个点来解决该问题。它需要更多点击(3对1),但用户完全可以控制他们想要的形状。如果你感兴趣的话,我可能仍然会在某处(谷歌地图)使用我的代码。