负方向的指数公式?

时间:2010-09-29 23:05:43

标签: javascript algorithm math

我有点卡住了解消极方向吗?它一定很简单,但似乎无法得到它!

x =当前x位置

dir = x轴上的运动方向

if (tween == 'linear'){

    if (dir == 1) {

        x += (x / 5);
    }

    else if (dir == -1){

        //what here??
    }
}

5 个答案:

答案 0 :(得分:2)

这里缺少的是你需要考虑偏离起点,而不是x = 0 (并且还要考虑方向的符号,其他人正确地说明了这一点)。也就是说,如果你的起点是x0,你的等式应该更像是:

x += (x-x0)/5

这是正方向和负方向上的运动图(注意位置在垂直轴上,时间在水平方向上)

alt text

这是Python代码。 (请注意,我在dt术语中添加了,因为没有明确的时间进行动态模拟太奇怪了。)

from pylab import *

x0, b, dt = 11.5, 5, .1

xmotion, times = [], []

for direction in (+1, -1):
    x, t = x0+direction*dt/b, 0  # give system an initial kick in the direction it should move
    for i in range(360):
        x += dt*(x-x0)/b
        t += dt
        xmotion.append(x)
        times.append(t)

plot(times, xmotion, '.')
xlabel('time (seconds)')
ylabel('x-position')
show()

答案 1 :(得分:1)

x += (abs(x) / 5) * dir;

答案 2 :(得分:1)

如果您执行x -= (x/5)之类的操作,则无法跨越x = 0 - 当x接近0时,它开始变得越来越少。尝试使用最小增量

v = abs(x) / 5;
x += ((v > MINVEL) ? v : MINVEL) * dir;

答案 3 :(得分:0)

if (tween == 'linear') {
   x += (x / 5) * dir;
}

答案 4 :(得分:0)

最后,我添加了一个帧计数器(t)并使用:

x = -(change*dir) * (t /= 10) * (t - 2) + x;

来自我的fav as3 tweener lib: http://code.google.com/p/tweener/source/browse/trunk/as3/caurina/transitions/Equations.as