慢慢减少数量

时间:2013-10-12 08:16:30

标签: java javascript math

我有一个数字,每一步增加一个增量。假设起始编号为0,增量为{​​{1}}。

在步骤100之后,我想开始减少基本增量(#5)。增量应该平滑减少,并且在步骤100它等于#10

这是一张图,基本上解释了我想做什么(y - 增量,x - 步)。

enter image description here

代码表示:

0

所以问题是如何表示这个?选择修改此弧的平滑度也是很好的。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果该曲线是四分之一圆,那么您想要的等式是

y = 20 * Math.sqrt(x * (10 - x));

如果它不是四分之一圈,那么这是任何人的猜测。

答案 1 :(得分:1)

if (x<=5)
    y = 100;
else if (x>=10)
    y = 0;
else {
    double radius = 100;
    double offset = (x-5)*20;
    y = Math.sqrt(raidus*radius - offset*offset);
}

http://fooplot.com/plot/offuyxbfzu

答案 2 :(得分:1)

这将给你一个完美的四分之一圈,从(5 | 100)开始,到(10 | 0)结束。

if (x > 5) {
    y = 100 * Math.sqrt( 1 - Math.pow(((x - 5) / 5), 2) );
}

http://fooplot.com/plot/2i8hy2twl4

说明(可选)

警告!可能包含数学!

让我们从一个更简单的情况开始,一个半径为1的四分之一圆,其中心为(0 | 0)。我们知道x² + y² = r²(毕达哥拉斯定理)。 x和r是已知的,所以我们可以这样计算:y = sqrt(r² - x²)。由于我们的半径始终为1而1²等于1,我们可以将其分解为:

y = sqrt(1 - x²)

y的值范围从0到1.我们希望它的范围从0到100。为实现这一目标,我们只需将右侧乘以100即可。

y = 100 * sqrt(1 - x²)
    ^^^^^^

要将整个事物5向右移动,我们需要从x中减去5。

y = 100 * sqrt(1 - (x - 5)²)
                    ^^^^^

另外,我们想要将它向右拉伸,这样我们的四分之一圆就可以从x = 5到x = 10而不是x = 6,所以将(x - 5)除以5。

y = 100 * sqrt(1 - ((x - 5) / 5)^2)
                           ^^^^

现在要做的就是用Math.sqrt替换sqrt,用Math.pow替换^ 2,使其成为有效的Javascript代码。

y = 100 * Math.sqrt( 1 - Math.pow(((x - 5) / 5), 2) );