使用点生成二次方程对数据进行插值

问题描述 投票:4回答:2

我正在尝试为使用二次曲线的游戏设计一个灵活的衰减计分系统。我可能会蛮力通过它,但是想知道是否有人可以帮助我提出一些灵活的建议,或者也许已经有现成的解决方案了!

但是基本上我需要具有以下能力来生成a,b和c的值:

y = ax^2 + bx + c

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

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

如果我能摆脱一个固定的二次方程式,我会但评分是根据用户对特定事件(X轴)的反应时间而定,y轴点将始终在0到1之间,其中0为最低分,最高分1!

让我知道是否需要更多信息!

javascript math quadratic
2个回答
10
投票

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

enter image description here

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))

0
投票

您可以将其表达为矩阵形式:aX = b

© www.soinside.com 2019 - 2024. All rights reserved.