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

如何从点数组生成过所有点且无起伏的贝塞尔折线SVG路径?

解决方案:约束型单调插值实现过点且无超调的曲线

你需要的是经过所有采样点、且曲线的极值(波峰/波谷)与采样点完全重合的拟合方案,这类需求可以通过**单调分段三次Hermite插值(PCHIP)**实现,它能严格保证曲线在相邻点之间保持单调性,不会出现超出采样点范围的凸起或凹陷。

核心原理

PCHIP插值会为每个区间计算Hermite多项式,通过约束导数使得曲线在相邻点之间单调,这样曲线的所有极值点必然就是输入的采样点,完全符合你“不高于/低于已知点”的要求。

代码示例(Python)

以Python的scipy库为例,实现步骤如下:

import numpy as np
from scipy.interpolate import PchipInterpolator
import matplotlib.pyplot as plt

# 你的点数组
points = np.array([[1, 2], [3, 1], [5, 3], [7, 0.5], [9, 2.5]])
x = points[:, 0]
y = points[:, 1]

# 创建PCHIP插值器
pchip = PchipInterpolator(x, y)

# 生成高密度的x值用于绘制平滑曲线
x_new = np.linspace(x.min(), x.max(), 1000)
y_new = pchip(x_new)

# 绘图展示
plt.plot(x, y, 'ro', label='原始点')
plt.plot(x_new, y_new, 'b-', label='PCHIP拟合曲线')
plt.legend()
plt.show()

方案适配性说明

  • 曲线严格经过所有输入点,无偏差
  • 相邻点间曲线保持单调,不会出现高于最高点或低于最低点的超调,所有波峰/波谷均与输入点重合
  • 曲线平滑度满足折线图转平滑曲线的展示需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:52:36