我在2-D中有一个非自相交多边形的顶点,其中x坐标是居中经度,y坐标是居中纬度。我想找到多边形的边缘。
我可以绘制顶点并查看哪些顶点相邻并查看边缘。但我的问题是如何才能获得这些优势。
例如,我正在考虑样本数据:
> data1
vertices lon lat
5 1.133179 1.027886
4 1.094459 1.013952
2 1.055672 1.000000
1 1.000000 1.028578
3 1.038712 1.042541
6 1.116241 1.070438
点的样本图是
我希望有一个像这样的数组
>edges
ind1 ind2
[1,] 5 6
[2,] 1 3
[3,] 3 6
[4,] 1 2
[5,] 2 4
[6,] 4 5
我对这种多边形的形状感兴趣(最小面积)
我使用R-package ashape
的函数alphahull
得到了这个数组。但是在这个函数中,Euclidean距离用于找到点之间的距离,这在我的情况下不适用(因为我正在考虑(lon,lat)上的数据,我们可以在包distHaversine
中使用geosphere
距离函数})。如果多边形具有大量顶点并且具有复杂形状,则该函数给出不令人满意的结果。该多边形可以是凸的,也可以不是凸的。
现在我想要的是建立一个算法来找到非交叉多边形的边缘,其中最小面积。
我们将非常感谢在此方向提供任何帮助。
答案 0 :(得分:1)
查找所有可能多边形的算法:
我不打算发布代码,但这里有67个可能的多边形,随机一组8个点。 可以想象,结果集随着点数迅速爆发(例如,n = 12 - > ~10000多边形......)
这里是具有最小和最大周长的多边形。
答案 1 :(得分:0)
将积分从lon,lat
转换为笛卡儿x,y
或x,y,z
lon,lat
作为x,y
,但要确保没有零交叉(如果然后将该轴偏移某个值,直到它没有)现在有很多可能的策略
修改1
修改2
简单的方法
如果上面的内容太多了,那么
< 0.6*avg_size
或> 1.2*avg_size
......