如何区分离散数据形成的多条曲线

问题:如何将二维离散数据 经纬度【xi,yi】 形成的多条曲线或直线区分,可以理解为一个航迹区分问题
可能出现的情况:
(一:曲线与曲线相交、直曲相交、直直相交)
(二:两条线相交角度很小,难以区分)
这张图只是我在网上找的这的个例,我不是要拟合出来这个曲线。而是区分A航迹由哪些离散点,B航迹有哪些点.

img

根据数学常识不难看出,这是三个正弦波,x=0:4*pi,在蓝色正弦波sin(x)的基础上分别加减了0.5的幅度,以及2和5的相移。

img


[Python] 二维曲线拟合 ( 含有笔记、代码、注释 ) - 知乎 多项式拟合一次函数import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from numpy import polyfit, poly1d %matplotlib inline x = np.linspace(-5, 5, 100) # 产生[-5,5]的100个等间… https://zhuanlan.zhihu.com/p/260140397

对每个点的周围点进行曲线拟合,得到每个点的拟合曲线。
对于两条航迹的交点,根据交点处曲线的切线方向和交角大小来判断是否为真正的交点。
对于难以区分的相交航迹,可以计算交点周围一定范围内的距离,根据距离大小来判断是否为同一航迹。

绘制区分度曲线(Andrews Curve)python
可以参考下


在matlab同一张绘图中区分不同曲线的方法_matlab区分不同曲线_Daler_sit的博客-CSDN博客 在matlab中使用不同颜色,不同线型、宽度和标记点等属性来区分同一张图下的不同曲线_matlab区分不同曲线 https://blog.csdn.net/weixin_57554259/article/details/128989330

离散数据 matlab画图,用Matlab画离散数据的平滑曲线,且数据对的顺序不影响线形..._FasterThanMind的博客-CSDN博客 本帖最后由 风神 于 2015-5-23 14:58 编辑在Matlab中用离散数据画二、三曲线,线形不受数据对的(xi,yi)或(xi,yi,zi)顺序影响。最近做实验,采集到了某一维线上的数据,和平面内某线的数据,需要分别画成二维、三维曲线,现在总结分享下,也希望论坛神人们不吝赐教,是画出更漂亮的图。后面再发帖总结下离散数据画3D曲面和4D曲面图。Matlab画图有感:画之前觉得简单,画的时候..._matlab 相同x的y取平均值后平滑曲线画图 https://blog.csdn.net/weixin_34535286/article/details/115825881?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169218043716800197044876%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169218043716800197044876&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-115825881-null-null.142^v92^controlT0_1&utm_term=%E5%A6%82%E4%BD%95%E5%8C%BA%E5%88%86%E7%A6%BB%E6%95%A3%E6%95%B0%E6%8D%AE%E5%BD%A2%E6%88%90%E7%9A%84%E5%A4%9A%E6%9D%A1%E6%9B%B2%E7%BA%BF&spm=1018.2226.3001.4187

自己找几个特殊点,然后求曲线方程?看你图像还是比较标准的

【以下回答由 GPT 生成】

我可以提供一个解决方案,使用数学方法来处理这个问题。具体步骤如下:

  1. 导入必要的库

python import numpy as np import scipy.signal as signal import matplotlib.pyplot as plt

  1. 生成一组测试数据

python # 生成3组曲线数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) y3 = np.sin(x) + np.cos(x)

  1. 使用信号处理库中的find_peaks函数找到曲线上的峰值点

python # 找到每条曲线上的峰值点 peaks1, _ = signal.find_peaks(y1) peaks2, _ = signal.find_peaks(y2) peaks3, _ = signal.find_peaks(y3)

  1. 根据峰值点的索引将数据分组,得到每条曲线的数据点

python # 根据峰值点索引分组获取每条曲线的数据点 data1 = np.column_stack((x[peaks1], y1[peaks1])) data2 = np.column_stack((x[peaks2], y2[peaks2])) data3 = np.column_stack((x[peaks3], y3[peaks3]))

  1. 绘制曲线和数据点检查结果

python # 绘制曲线和数据点 plt.plot(x, y1, label='Curve 1') plt.plot(x, y2, label='Curve 2') plt.plot(x, y3, label='Curve 3') plt.plot(data1[:, 0], data1[:, 1], 'ro', label='Data points 1') plt.plot(data2[:, 0], data2[:, 1], 'bo', label='Data points 2') plt.plot(data3[:, 0], data3[:, 1], 'go', label='Data points 3') plt.legend() plt.show()

这个解决方案会根据曲线上的峰值点将数据分组,并得到每条曲线对应的数据点。你可以根据实际数据进行调整,并根据需要对代码进行修改。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^