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

如何对数组插值得到相邻点间距相等的二维散点序列

等距散点插值修正方案

问题原因

你现在的插值方式是分别对x、y坐标以原始点的索引为自变量做等距采样,等距的索引只代表原始点序号间隔相等,和曲线上的实际移动距离没有关系,所以最终得到的点分布不均匀。

正确处理逻辑

以原始路径的累积弧长作为统一的插值自变量,流程如下:

  • 计算原始序列相邻点的欧式距离,累加得到累积弧长数组
  • 按目标点数对总弧长做等距分割,得到等距弧长序列
  • 将x、y分别作为弧长的函数做样条插值,代入等距弧长序列得到最终的等距坐标点

实现代码

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

# 原始散点坐标 xn, yn
# 1. 计算累积弧长
dx = np.diff(xn)
dy = np.diff(yn)
seg_length = np.sqrt(dx ** 2 + dy ** 2)
cum_len = np.concatenate(([0], np.cumsum(seg_length)))
total_len = cum_len[-1]

# 2. 生成等距弧长采样点
point_num = 50
equal_cum_len = np.linspace(0, total_len, point_num)

# 3. 插值得到等距坐标
spl_x = UnivariateSpline(cum_len, xn, k=3, s=0)
spl_y = UnivariateSpline(cum_len, yn, k=3, s=0)
equal_x = spl_x(equal_cum_len)
equal_y = spl_y(equal_cum_len)

# 校验相邻点间距
check_dist = np.sqrt(np.diff(equal_x)**2 + np.diff(equal_y)**2)
print("相邻点间距标准差:", np.std(check_dist)) # 数值接近0即说明间距几乎完全相等

# 绘图
plt.scatter(equal_x, equal_y, s=8, label="等距插值点")
plt.scatter(xn, yn, s=8, label="原始点")
plt.axis('equal') # 避免坐标轴拉伸导致视觉误差
plt.legend()
plt.show()

关键说明

  • 必须添加plt.axis('equal'),否则横纵轴缩放比例不同会导致视觉上看起来点的间距不等,实际计算的间距是均匀的
  • 原始点必须是沿路径按顺序排列的,如果顺序混乱会导致累积弧长计算错误,最终插值结果失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:04