使用点生成二次方程来插值数据

时间:2013-06-03 12:19:43

标签: javascript math quadratic

我正在尝试使用二次曲线为游戏提供灵活的衰减评分系统。我可能会粗暴地通过它,但是想知道是否有人可以帮我提出一些灵活的东西,或者可能已经有一些现成的解决方案了!

但基本上我需要能够生成a,b&的值。 c in:

y = ax^2 + bx + c

从3个点(我知道它落在有效的二次曲线上,但是基于可配置的设置和对事件作出反应的最大时间是动态的),例如:( - 1100,0),(200,1),( 1500,0)。

因此我可以插入x的值来生成Y值,这将决定我给用户的分数。

如果我可以使用固定的二次方程式,我会得到但是评分是基于用户对特定事件(X轴)做出多少反应,y轴点始终在0和1之间,0得分最低,1分为最高分!

如果您需要更多信息,请告诉我们!

2 个答案:

答案 0 :(得分:9)

您可以使用拉格朗日多项式插值,曲线​​由

给出
y(x) = y_1 * (x-x_2)*(x-x_3)/((x_1-x_2)*(x_1-x_3))
     + y_2 * (x-x_1)*(x-x_3)/((x_2-x_1)*(x_2-x_3))
     + y_3 * (x-x_1)*(x-x_2)/((x_3-x_1)*(x_3-x_2))

如果收集系数,则获得

a = y_1/((x_1-x_2)*(x_1-x_3)) + y_2/((x_2-x_1)*(x_2-x_3)) + y_3/((x_3-x_1)*(x_3-x_2))

b = -y_1*(x_2+x_3)/((x_1-x_2)*(x_1-x_3))
    -y_2*(x_1+x_3)/((x_2-x_1)*(x_2-x_3))
    -y_3*(x_1+x_2)/((x_3-x_1)*(x_3-x_2))

c = y_1*x_2*x_3/((x_1-x_2)*(x_1-x_3))
  + y_2*x_1*x_3/((x_2-x_1)*(x_2-x_3))
  + y_3*x_1*x_2/((x_3-x_1)*(x_3-x_2))

答案 1 :(得分:0)

你可以用矩阵形式表达它:aX = b

    1 x1 x1^2
a=  1 x2 x2^2
    1 x3 x3^2

   y1
b= y2
   y3

然后通过反转矩阵来解决(可以通过高斯方法非常简单地完成) http://en.wikipedia.org/wiki/Gaussian_elimination

X = a^-1*b
在这种情况下,

和X是您正在寻找的[c b a]系数。