大纲绘图算法

时间:2013-07-03 16:18:21

标签: algorithm computational-geometry

我的妻子已经接受了这项任务,所以这是我们的首要任务: - )

我有一系列积分(实际上是Northings& Eastings,但这并不重要)。我想取这些点并创建一组代表轮廓的矢量,这样我就可以在Google地球上绘图。

所以,比如:

  #                       #
           #             #       #
#             #    #
      #   #

            #

会给:

  #-----------------------#--
 /                            \ --#
#                  #------------/
 \-----#         /
         \     /
            #

我想出的一个可能的解决方案是计算每个点之间的向量,并丢弃与另一个向量重叠的每个向量。我还没有实现这个(不太确定如何),但我想知道是否还有其他方法。

该算法只需要运行几次,因此如果每次运行需要一个小时,那么RAM就不会出现问题。

3 个答案:

答案 0 :(得分:7)

候选多边形的制定

看起来你正在寻找一个多边形

  • 它的所有顶点都在你的点集中
  • 它包含点集中的每个点

这定义了一组与你的点集相关的可行候选多边形。

Convex Hull?

一个目标函数可能是“在这些多边形中,选择具有最小顶点数的那个”。这将是你的点集的凸包。其他答案解决了这种方法,所以我不会再说什么了。

更多......

但这不是您可以选择的唯一目标函数。例如,您可以在具有较少顶点,总面积较小和顶点角度较小的之间进行权衡。我不知道该问题的任何现有命名算法,但它绝对是一个有趣的算法。

一种方法可以从找到凸包开始,然后将“拉入”边缘“拉入”内部顶点,在这些位置,额外顶点的成本超过总面积较小的好处。

例如,这个:

enter image description here

通过沿着顶部拉动边缘会成为这个:

enter image description here

第二个多边形可能是一个更“自然”的点集,即使它是点集的凸包。

答案 1 :(得分:2)

你可能正在寻找这些积分的凸面船体;有一个variety of algorithms可以找到它。

答案 2 :(得分:0)

Here 是一个用于从code.google.com找到凸包的库

Here 是同一个github库,但使用 Jarvis的Match Convex Hull算法

希望他们帮忙!