Python参数曲线拟合:解决splprep生成闭合曲线问题
修正方案
你代码得到闭合曲线的原因是两处设置:
- 手动将起点坐标追加到了坐标数组末尾,强制首尾点重合
splprep的per参数设为True,代表拟合周期(闭合)样条曲线
只需要做两处小幅修改即可得到非闭合的拟合曲线:
- 注释/删除追加起点坐标的两行代码
- 将
per=True改为per=False
修改后的完整代码如下:
import numpy as np from scipy import interpolate from matplotlib import pyplot as plt x = np.array([23, 24, 24, 25, 25]) y = np.array([13, 12, 13, 12, 13]) # 注释掉追加起点的操作 # x = np.r_[x, x[0]] # y = np.r_[y, y[0]] # per改为False拟合非周期样条,s=0保证曲线经过所有输入采样点 tck, u = interpolate.splprep([x, y], s=0, per=False) # 对样条做1000点插值采样 xi, yi = interpolate.splev(np.linspace(0, 1, 1000), tck) # 绘图 fig, ax = plt.subplots(1, 1) ax.plot(x, y, 'or') ax.plot(xi, yi, '-b') plt.show()
修改后得到的曲线会自动以第一个和最后一个采样点作为首尾端点,符合你的需求。
内容的提问来源于stack exchange,提问作者michael999
相关产品推荐
相关产品推荐

