我正在用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位置?就我而言,我只计算了球与目标位置之间的起始距离..那么,任何想法?有这个等式吗?
答案 0 :(得分:3)
所以你想要i的总和从1到∞超过术语(速度×摩擦 i ),并且你希望结果等于dist。这是一个无限geometric series,其极限是速度×摩擦力/(1 - 摩擦力)。
所以简单地解决速度等式,你得到:
speed = (1/friction - 1)*dist