【问题标题】:Calculate speed by distance and friction通过距离和摩擦计算速度
【发布时间】:2014-03-08 21:59:26
【问题描述】:

我正在用 Javascript、Canvas、HTML5 编写游戏,我刚刚发现了一个与高等数学有关的大问题。游戏为平面 2D,因此您可以从上方看到世界。这意味着没有重力,只有摩擦。

代码:

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 位置?就我而言,我只计算了球和目标位置之间的起始距离.. Soo,有什么想法吗?有公式吗?

【问题讨论】:

  • 你必须更详细地解释你的游戏是关于什么的。如果你的球没有初始速度并且没有加速度,那么球永远不会到达它的目标,这就是简单的物理学。我认为你有一个概念问题,没有数学问题。
  • 您必须自己决定。没有时间就没有速度,所以你必须决定你想让你的球每秒移动多少像素。此外,您还必须决定,您的球每秒增加多少像素的速度。您也可以使用稳定速度s = v*t 的公式,但您仍然需要知道时间。 (我很抱歉这里的术语,我刚刚在我的英语词汇中发现了一个巨大的漏洞。)
  • 我希望手榴弹降落在光标处,而不是通过按住鼠标并仅朝方向射击来加载能量。
  • sry 垃圾邮件,只是一个小故障。这是一个大游戏,不是很多东西而是很多代码,我自己制作了游戏和图形,但声音只是简单地下载了
  • 相当多的代码,所以我没有解释真正的问题

标签: javascript html math canvas physics


【解决方案1】:

因此,您希望 i 在期限内从 1 到 ∞ 的总和(速度 × 摩擦i),并且您希望结果等于 dist。这是一个无穷大geometric series,其极限是速度×摩擦力/(1 − 摩擦力)。

所以简单地求解速度方程,你得到:

speed = (1/friction - 1)*dist

【讨论】:

  • 如果我这样做,你确定它会在 x 70 y 90 处停止吗:var speed = (1 +摩擦)/摩擦 * dist ???
  • @Murplyx:我的公式有误,基本上是符号错误。现在应该修好了。
  • 好吧,我用计算器的时候也是这么想的
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多