通过距离和摩擦计算速度

时间:2014-02-11 08:11:03

标签: javascript html5 math canvas physics

我正在用Javascript,Canvas,HTML5编写游戏,我发现了一个与高级数学相关的大问题。游戏是平面2D,所以你可以看到世界。这意味着没有重力,只有摩擦。

CODE:

var friction = 0.97

var target = {
  x: 70,
  y: 90,
}

var ball = {
  x: 10,
  y: 20,
  vx: 0,
  vy: 0,
}
var dx = ball.x - target.x
var dy = ball.y - target.y
var angle = Math.atan2(dy, dx)
var dist = Math.sqrt(dx * dx + dy * dy) // <--- AS FAR AS I'VE COME
var speed = ??? // <--- HERE IS THE PROBLEM
ball.vx = Math.cos(angle) * speed
ball.vy = Math.sin(angle) * speed

function update() {
  ball.vx *= friction
  ball.vy *= friction
  ball.x += ball.vx
  ball.y += ball.vy

  // Drawing and other unneccesary things to involve here

  window.requestAnimationFrame(update)
}

update()

所以,我的问题是:如何计算我创建球的部分的速度,使球停在目标x和y位置?就我而言,我只计算了球与目标位置之间的起始距离..那么,任何想法?有这个等式吗?

1 个答案:

答案 0 :(得分:3)

所以你想要i的总和从1到∞超过术语(速度×摩擦 i ),并且你希望结果等于dist。这是一个无限geometric series,其极限是速度×摩擦力/(1 - 摩擦力)。

Formula of infinite sum

所以简单地解决速度等式,你得到:

Solving the formula for speed

speed = (1/friction - 1)*dist