数学吧 关注:840,183贴子:8,571,470
  • 6回复贴,共1

多边形扩展/缩放遇到内部顶点的问题

只看楼主收藏回复

最近需要扩展一些不规则的多边形图形(经纬度数据),自己想了个算法实现了,没搞定;然后搜了个算法,比我搞的好很多,但是也存在问题。现在实在搞不定了,想求助一下各位大佬。问题详细描述如下,以搜的那个算法为例。
首先,上一张整体扩展图。

上图蓝色线条是原数据,红色线条是扩展后的数据,扩展算法是在CSDN搜的,链接htt-ps://bl-og.cs-dn.n-et/lw-eiyu-e/a-r-ticl-e/de-ta-ils/-1-030-33-63-0(防吞,去掉所有'-')。
可以看到,大部分区域扩展是正确的,但是一些[凹形]数据扩展出现重叠部分,截取部分重叠部分图如下。

上述算法的思路是取某点X,根据它连接的两条边和需要扩展的距离,来计算它需要偏移的向量,得到它的新位置。我仔细看了看,抽取的点都正确的扩展了,算法正常运行了。
===========================================================================
抽取部分数据(数据放二楼),加入两个新顶点(多边形的收尾各加一个,方便看坐标),修改扩展距离(expand),得到如下结果:
【说明】扩展距离为旧边与新边之间的距离,不是旧顶点与新顶点之间的距离
expand=0.01

expand=0.1

expand=1

===========================================================================
从上面三张图就看的比较明显了,扩展距离较大的时候,凹形部分会发生重叠。感觉自己真的菜的真实,折腾了好久查了好多资料也没能把重叠部分搞掉。。。


IP属地:江苏1楼2021-08-03 10:19回复
    扩展前的数据
    【注】第一个顶点和最后一个顶点是手动添加的,扩展距离expand=0.1
    91.8,42.212404
    91.498519,42.212404
    91.503647,42.202731
    91.533002,42.187234
    91.558643,42.179612
    91.571306,42.17032
    91.604324,42.156228
    91.618767,42.152801
    91.637448,42.140506
    91.646029,42.110249
    91.644302,42.099017
    91.632267,42.083495
    91.633523,42.074531
    91.664762,42.066124
    91.697467,42.063722
    91.71081,42.053425
    91.727974,42.027849
    91.73598,42.013253
    91.754922,41.965151
    91.8,41.965151
    =====================================================================
    扩展后的数据
    91.9,42.312404
    91.332322,42.312404
    91.429722,42.128678
    91.495046,42.094192
    91.513493,42.088709
    91.521444,42.082874
    91.572926,42.060902
    91.578521,42.059574
    91.551393,42.077428
    91.543881,42.103919
    91.5494,42.139819
    91.527378,42.111416
    91.543668,41.995155
    91.647955,41.967089
    91.660167,41.966192
    91.636839,41.984195
    91.642448,41.975837
    91.645256,41.970717
    91.686827,41.865151
    91.9,41.865151
    =====================================================================
    来源说明:原数据是公开数据,来自高德地图


    IP属地:江苏3楼2021-08-03 10:26
    回复
      这个要找到图形的重心吧
      比如说某一点X 重心G 偏移向量平行于GX向量模长为expand?
      外行 不太懂


      IP属地:浙江来自Android客户端4楼2021-08-03 11:18
      收起回复
        不要求解析解的话,有没有考虑直接做洪水重填/BFS把它的内部模拟出来


        IP属地:海南来自Android客户端5楼2021-08-03 12:15
        回复
          我觉得根据几何中心等比例放缩靠谱点,可以保证形状不变


          IP属地:江苏来自Android客户端6楼2021-08-03 12:58
          收起回复