You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中交互式B样条拟合及三次样条拟合函数实现

如何在Python中实现交互式B样条拟合?

我来给你详细拆解一下这个三次样条拟合函数的使用方法,还有输入点的格式要求,帮你快速上手:

输入点P的格式规范

  • P得是一个列表,里面每个元素都是表示坐标的二元组(tuple),比如 [(x1,y1), (x2,y2), ..., (xn,yn)] 这种形式
  • 坐标值不管是整数还是浮点数都可以,只要能被NumPy正常处理就行
  • 注意哦,这个函数默认会把曲线做成闭合的——它会把P的第一个点拼到末尾,所以如果你不需要闭合曲线,记得删掉代码里的pts = np.vstack([P, P[0]])这一行

函数plotCurve()的使用步骤

  1. 先导入依赖库:这个函数依赖NumPy、SciPy的interp1d和Matplotlib,所以使用前必须先导入这些库:
    import numpy as np
    from scipy.interpolate import interp1d
    import matplotlib.pyplot as plt
    
  2. 准备你的输入点P:按照上面的格式把需要拟合的坐标点整理好
  3. 调用函数并查看结果:直接把P传进去就行,函数会返回拟合后曲线上的x、y坐标数组,同时会自动绘制原始点和拟合曲线
    # 举个实际的输入例子
    P = [(921,1181),(951,1230),(993,1243),(1035,1220),(1070,1175)]
    # 调用拟合函数
    xi, yi = plotCurve(P)
    # 如果看不到图像,要么取消函数里的plt.show()注释,要么在这里手动调用plt.show()
    plt.show()
    

额外说明:函数的工作逻辑

这个函数其实是对x、y坐标分别做了三次样条插值,具体流程是:

  • 把输入点首尾拼接,形成闭合路径(如果不需要闭合就去掉这一步)
  • 给每个原始点分配一个索引值作为插值的自变量
  • 用interp1d生成高密度的拟合点(默认是原始点数的100000倍,保证曲线足够平滑)
  • 最后绘制出平滑曲线和原始的控制点

内容的提问来源于stack exchange,提问作者snelzb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:10:34