一种快速收缩地图边界方法

一种快速收缩地图边界方法


  在制作地图后,有时需要向内收缩地图地图边界,例如左右边界需要向内收缩30cm。这里提供了一种快速收缩地图的方法。先放一张收缩后的效果图。
在这里插入图片描述
  这里以sin(x)作为地图的右边界,sin(x)+1作为地图右边界,左右边界都需要向内收缩30cm。
方法如下:

  • 1、假设右边界连续AB两点,A点向内收缩Dist的距离,为C点。
  • 2、计算AB线段的斜率k
  • 3、获取AB的倾斜角&
  • 4、计算C点的坐标
    在这里插入图片描述
      具体计算公式如下:
A(x0, y0) B(x1, y1)
k = (y1 - y2)/(x1 - x2)
& = atan2(k)

向右缩
x0 + Dist * sin(&)
y0 - Dist  * cos(&)

向左缩
x0 - Dist  * sin(&)
y0 + Dist * cos(&)

最后,上干货,代码实现:

def move_boundary(x, y, flag, dist):
    size = x.shape[0]
    result_X = []
    result_Y = []

    for i in range(size - 1):
        x_1 = x[i]
        y_1 = y[i]
        x_2 = x[i + 1]
        y_2 = y[i + 1]

        angle = np.arctan2(y_1 - y_2, x_1 - x_2)
        # move left boundary
        if flag == 0:
            x1_ = x_1 - dist * np.sin(angle)
            y1_ = y_1 + dist * np.cos(angle)
        # move right boundary
        elif flag == 1:
            x1_ = x_1 + dist * np.sin(angle)
            y1_ = y_1 - dist * np.cos(angle)
        result_X.append(x1_)
        result_Y.append(y1_)
    return  result_X, result_Y
    x = np.linspace(1, 100, 100)
    y1= np.sin(x)
    y2 = np.sin(x) + 1
    plt.plot(x, y1, 'b', label = 'sin(x)')
    plt.plot(x, y2, 'g', label = 'sin(x) + 1')

    result_X, result_Y = move_boundary(x, y1, 1, 0.2)
    plt.plot(result_X, result_Y, 'r', label='move right')
    result_X, result_Y = move_boundary(x, y2, 0, 0.2)
    plt.plot(result_X, result_Y, 'c', label='move left')
    plt.xlim(0, 20)
    plt.legend()
    plt.show()

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值