通过距离和摩擦计算速度
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:我的公式有误,基本上是符号错误。现在应该修好了。 好吧,我用计算器的时候也是这么想的以上是关于通过距离和摩擦计算速度的主要内容,如果未能解决你的问题,请参考以下文章