将对象移向javascript中的某个点

时间:2013-12-24 13:47:50

标签: javascript math

我正在努力解决这个问题,我需要将一个物体均匀地移向一个点。我有一个点在x:500 y:250和一个0,0的对象。如果移动速度为'1',我将如何解决这个问题,我需要以x:0.666和y:0.333的速度移动。 y速度是x速度的一半。我确定我在这里只是一个绝对的白痴。

3 个答案:

答案 0 :(得分:8)

首先,使用atan2确定逼近角度。

dx = 500 - 0;
dy = 250 - 0;
angle = atan2(dy, dx)

使用角度,您可以将速度分解为x和y分量。

xVelocity = velocity * cos(angle);
yVelocity = velocity * sin(angle);

对于你的例子问题,这将使xVelocity等于0.8944,yVelocity等于0.4472,这看起来是正确的。 (你最初的猜测是0.666和0.333不准确,从那时起你的总移动速度将是0.745。)

答案 1 :(得分:5)

首先计算源点和目标点之间的差值:

var dx = destX - srcX;
var dy = destY - srcY;

然后使用atan2函数计算两点之间的角度:

var angle = Math.atan(dy, dx);

现在您有了角度,您可以通过幅度(1)和角度计算速度矢量:

var magnitude = 1.0;
var velX = Math.cos(angle) * magnitude;
var velY = Math.sin(angle) * magnitude;

不要将幅度与矢量的分量之和混淆,公式v.x + v.y = 1.0不正确,因为幅度是平方分量之和的平方根,因此正确的公式为{{ 1}}

答案 2 :(得分:2)

你需要这样做:

function calculateSpeed(x1, y1, x2, y2)
{
    x = x2 - x1;
    y = y2 - y1;
    total = x + y;

    speedX = x / total;
    speedY = y / total;

    alert("x: " + speedX + " y: " + speedY);
}

所以你需要计算点x1和x2之间的差值,与y相同,然后计算差值的总和并用它除x / y!

请参阅此fiddle以获取示例