1

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

如何通过这些点绘制一条平滑线?结果应该看起来像一个正弦波,但具有不同的幅度和波长。只要它允许我在不使用任何线或样条的库函数的情况下计算插值点的 Y 坐标,它就可以简化或近似。语言无关紧要,我对算法感兴趣,而不是实现。为了全面披露,我计划在 JavaScript 中实现它。

我想远离复杂的数学,比如贝塞尔样条曲线或带有控制点的东西。我觉得必须有一个简单的解决方案,可能适用于到点的距离或类似的东西。

任何想法都值得赞赏。

4

2 回答 2

0

You cannot avoid "complicated" math here. And it is not that much complicated.

Cubic splines is good solution for your problem. For the similar task I found this paper with short explanation and a matrix which I used for my computations.

You can try using approximation methods. "Least squares" and its modifications are one of the simplest, and easy to implement.

于 2012-07-20T14:16:08.820 回答
0

听起来你需要一个插值多项式。您可以通过多种方式安装它。试试看这个

http://en.wikipedia.org/wiki/Polynomial_interpolation#Constructing_the_interpolation_polynomial

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

http://en.wikipedia.org/wiki/Least_squares#Linear_least_squares

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

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

http://en.wikipedia.org/wiki/Spline_interpolation

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

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

于 2012-07-15T16:01:11.767 回答