Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何在二维空间的点之间平滑插值?_Math_Graphics_Interpolation_Curve_Spline - Fatal编程技术网

Math 如何在二维空间的点之间平滑插值?

Math 如何在二维空间的点之间平滑插值?,math,graphics,interpolation,curve,spline,Math,Graphics,Interpolation,Curve,Spline,假设我有很多点,每个点由二维笛卡尔坐标系中的X和Y坐标定义。每个点的X坐标都大于其前一个点的X坐标,因此不能有任何循环 如何通过这些点画一条平滑的线?结果应该看起来像正弦波,但振幅和波长不同。如果它被简化或近似,只要它允许我计算插值点的Y坐标,而不使用任何用于直线或样条曲线的库函数,这是绝对好的。语言不重要,我感兴趣的是算法,而不是实现。为了充分披露,我计划用JavaScript实现它 我想远离复杂的数学,比如Bézier样条曲线或带有控制点的东西。我觉得必须有一个简单的解决方案,可能与点的距离

假设我有很多点,每个点由二维笛卡尔坐标系中的X和Y坐标定义。每个点的X坐标都大于其前一个点的X坐标,因此不能有任何循环

如何通过这些点画一条平滑的线?结果应该看起来像正弦波,但振幅和波长不同。如果它被简化或近似,只要它允许我计算插值点的Y坐标,而不使用任何用于直线或样条曲线的库函数,这是绝对好的。语言不重要,我感兴趣的是算法,而不是实现。为了充分披露,我计划用JavaScript实现它

我想远离复杂的数学,比如Bézier样条曲线或带有控制点的东西。我觉得必须有一个简单的解决方案,可能与点的距离或类似的东西


任何想法都值得赞赏。

听起来你需要一个插值多项式。有很多种方法可以适应它。试试看这个

如果你有大量的点,那么你可以考虑使用一个近似值,否则,你可能会遭受过拟合和在点之间的数据表示不佳。在这种情况下,可以使用最小二乘多项式近似。这取决于你需要的准确度

特别是,如果您的数据是正弦的,您实际上可以使用三角基函数(不同整数频率的正弦或余弦函数)而不是x的正则幂来近似数据

或者,可以使用样条曲线以不涉及控制点的非参数方式进行插值

使用样条曲线将防止您获得使用基本高次多项式插值可以获得的潜在野生振荡

与所有近似问题一样,如果不查看数据(以及数据量),很难给出明确的答案。最后,如果你有大量的数据,基本多项式插值不是你的朋友,因为如果你有1000个点要插值,你需要一个999次多项式。

在这里你无法避免“复杂”的数学。而且也没那么复杂

三次样条曲线是解决问题的好方法。对于类似的任务,我找到了一张有简短解释的纸和一个用于计算的矩阵

您可以尝试使用近似方法。“最小二乘法”及其修改是最简单、易于实现的方法之一