通过距离和摩擦计算速度

Posted

技术标签:

【中文标题】通过距离和摩擦计算速度【英文标题】: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 垃圾邮件,只是一个小故障。这是一个大游戏,不是很多东西而是很多代码,我自己制作了游戏和图形,但声音只是简单地下载了 相当多的代码,所以我没有解释真正的问题 【参考方案1】:

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

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

speed = (1/friction - 1)*dist

【讨论】:

如果我这样做,你确定它会在 x 70 y 90 处停止吗:var speed = (1 +摩擦)/摩擦 * dist ??? @Murplyx:我的公式有误,基本上是符号错误。现在应该修好了。 好吧,我用计算器的时候也是这么想的

以上是关于通过距离和摩擦计算速度的主要内容,如果未能解决你的问题,请参考以下文章

计算精灵根据需要行进的距离和行进速度改变大小的速度

如何根据手机加速度计算距离

电磁波,无线电,Wifi 4G,摩擦生电

计算初始速度以惯性移动设定距离

Java案例:根据速度计算刹车的安全距离

三种不同的方式,计算欧氏距离,速度比较