美文网首页
求二维空间中曲线的平行曲线(Python实现)

求二维空间中曲线的平行曲线(Python实现)

作者: Deepool | 来源:发表于2020-07-15 19:12 被阅读0次


import numpy as np


def dx(dis, k):
    return np.sqrt(dis / (k**2 + 1.))


def dy(dis, k):
    return k * dx(dis, k)


def parallel_curve(xs, ys, ks, dis=1.):
    """ 由于对称性, 会返回两条平行曲线上的点
    :param xs: ndarray, 原始曲线上点的x值   [shape:(N,)]
    :param xs: ndarray, 原始曲线上点的y值   [shape:(N,)]
    :param ks: ndarray, 原始曲线上点的斜率  [shape:(N,)]
    :param dis: float, 曲线间的距离
    :return: ndarray, pxs [shape:(2, N)], pys [shape:(2, N)]
    """
    g = np.sign(ks)
    g[g == 0] = 1
    ms = -1. / (ks + 1e-20)
    pxs = np.vstack((xs + dx(dis ** 2, ms) * g, xs - dx(dis ** 2, ms) * g))
    pys = np.vstack((ys + dy(dis ** 2, ms) * g, ys - dy(dis ** 2, ms) * g))
    return pxs, pys    

Example:

x = np.arange(-20, 20, 1)
curve = np.poly1d([0.005, 0.02, -1, 2])     # 可以通过定义或拟合点来找到函数表达式
der = np.polyder(curve)
y = curve(x)
ks = der(x)
ps = parallel_curve(x, y, ks, dis=1.5)

plt.figure(figsize=(17, 12))
plt.plot(x, y, color='crimson', marker='o', linewidth=1.5)
plt.plot(ps[0][0], ps[1][0], color='teal', marker='o', linewidth=1.5)
plt.plot(ps[0][1], ps[1][1], color='mediumpurple', marker='o', linewidth=1.5)
plt.grid()
plt.axis("equal")
plt.xlabel('x', {'fontsize': 'x-large'})
plt.ylabel('y', {'fontsize': 'x-large'})
plt.legend(('original curve', 'parallel curve 1', 'parallel curve 2'), loc=2)
plt.title('distance=1.5', {'fontsize': 'x-large'})
plt.show()

进一步了解平行曲线

相关文章

  • 求二维空间中曲线的平行曲线(Python实现)

    Example: 进一步了解平行曲线

  • 2018-01-26

    #练习 **基本原理:** 将图像空间中的曲线变换到参数空间中,通过检测参数空间中的极值点,确定出该曲线的描述参数...

  • 高效学习力复盘

    。 【新知】 1. 二维曲线———开启二维曲线的重要性,什么是二维曲线 2. 学思做教盈——知识转化为生产力的闭环...

  • 理解与运用贝塞尔曲线

    1.曲线介绍 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线...

  • iOS开发:浅谈贝塞尔曲线

    贝塞尔曲线 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。...

  • 线说人生

    人生轨迹,就像曲线,人的一生,就在线中。 线分直线与曲线。直线又有相交直线,平行直线以及射线。曲线又有有限相交曲线...

  • 详解SVG路径path的贝塞尔曲线

    什么是贝塞尔曲线? “什么是贝塞尔曲线?”又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。贝塞尔曲线...

  • Canvas教程(11)——二次贝塞尔曲线

    贝塞尔曲线 Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点、...

  • 贝塞尔曲线公式推导原理

    贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。1962,由...

  • 贝塞尔曲线的全解析

    简单了解贝塞尔曲线 Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。曲线定义:起始点、终...

网友评论

      本文标题:求二维空间中曲线的平行曲线(Python实现)

      本文链接:https://www.haomeiwen.com/subject/etedhktx.html