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