用Delphi/Lazarus绘制二次方程

用Delphi/Lazarus绘制二次方程,delphi,animation,math,quadratic,Delphi,Animation,Math,Quadratic,我试图用一个二次方程来设置一个物体位置的动画,以获得一种快速启动和缓慢停止的运动 这已经在Delphi XE6中可用,但我使用Delphi XE2和Lazarus,并且我创建了自己的动画处理系统,它实际上非常有效 我已经有了一个线性公式和一个半正弦公式,但现在我想要一个二次公式 半鼻窦公式确实在开始时快速移动我的物体,然后减速,但我想要一个更夸张的曲线,它在开始时非常快,然后快速减速,最后停止 不幸的是,我没有可用的代码,因为这是我正在寻找的代码 我用过我们亲爱的朋友谷歌先生,但没有找到任何我能

我试图用一个二次方程来设置一个物体位置的动画,以获得一种快速启动和缓慢停止的运动

这已经在Delphi XE6中可用,但我使用Delphi XE2和Lazarus,并且我创建了自己的动画处理系统,它实际上非常有效

我已经有了一个线性公式和一个半正弦公式,但现在我想要一个二次公式

半鼻窦公式确实在开始时快速移动我的物体,然后减速,但我想要一个更夸张的曲线,它在开始时非常快,然后快速减速,最后停止

不幸的是,我没有可用的代码,因为这是我正在寻找的代码

我用过我们亲爱的朋友谷歌先生,但没有找到任何我能理解的信息

基本上需要的是一个公式,它给出一个从0到1的浮点数

然后取需要移动的物体位置的增量,乘以所需的公式

在我的动画系统中,我有两个关于动画过程的值:

var CurrentPos, Resolution: single;
值“CurrentPos”表示公式的位置。 例如,对于窦房结,我可以应用“CurrentPos”作为角度,或绘图的X轴, “分辨率”将是X轴上的最大角度(360度)或整个绘图视图

目前我发现的二次方程的公式如下:

formula := (-b+(Sqr(Power10(b, 2)-4*(a*c))))/(2*a);
在这个公式中,我把“CurrentPos”的值放在哪里


或者真正的问题是,我把整个数学过程都搞错了吗

您想要一个未知x中的方程,即:

  • x中的二次型
  • 当x=0时,其值为0
  • 当x=1时,其值为1
  • 当x接近0时变化迅速,当x接近1时变化不快 因此,你的二次曲线可以是这样的形式:1-(1-x)2

    当x=0时导数为2,当x=1时导数为0

    您需要将输入变量转换为0到1的范围。一旦你这样做了,把它作为x输入到上面的公式中

    如果要使用不同的指数,只需替换指数即可。例如,一个立方体版本是:1-(1-x)3

    在代码中,您可以编写以下内容:

    function OutPoly(x: Real, exponent: Integer): Real;
    begin
      Result := 1 - IntPower(1-x, exponent);
    end;
    

    你已经说了你已经得到了一些东西。告诉我们你试过什么。@FreeConsulting你指的是什么?公式还是动画系统?你能画一张有V-t或V-S依赖关系的图片吗?你的公式看起来有点像,可以找到二次曲线的根。你必须先弄清楚数学才能继续。对不起,我不太擅长那种类型的数学。我试过你的建议,但它给了我一条对角线,没有曲线。这是怎么回事?也许你弄错了。我的答案中的表达式是二次的而不是线性的。当然有可能我试图理解你的问题是不好的。您没有发布任何代码或任何数学。如果x介于0和1之间,并且公式(在代码中)如下所示:f:=1-Power10((1-x),2);对吗?Power10是怎么回事?你的表达式是线性的。您需要
    1-Sqr(1-x)
    。但是如果您想要OutQuint,那么您需要
    1-IntPower(1-x,5)
    。Sqr不是Sqr根吗?我以为是吗?我把Power10换成了Sqr,现在我得到了一条不错的曲线。谢谢你,大卫!