- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我做了一个弹跳球的简单模拟来学习 haskell。球应该在图像边界上弹起,并通过重力向下加速。
问题在于,随着时间的推移,球会“神奇地”弹得更高。我希望它保持相同的最大高度。
我怀疑bounce
有问题,而不是move
有问题,因为bounce
将球“传送”回框架内,这是物理上不准确。我尝试了不同的方法来模拟正确的行为,但找不到任何正确的方法。
执行此操作的正确方法是什么?
这是在 CodeWorld 上运行的代码:
main = simulationOf initial step draw
data World = Ball Point Vector
radius = 40
border = 250 - radius
g = -500
initial (x:y:vx:vy:_) = Ball (400*x - 200, 400*y - 200)
(400*vx - 200, 400*vy - 200)
step t world = bounce (move t world)
move t (Ball (x,y) (vx,vy)) = Ball (x + vx*t, y + vy*t) (vx, vy + g*t)
bounce (Ball (x,y) (vx,vy)) = Ball (nx,ny) (nvx, nvy)
where nx = fence (-border) border x
ny = fence (-border) border y
nvx = if nx /= x then -vx else vx
nvy = if ny /= y then -vy else vy
fence lo hi x = max lo (min hi x)
draw (Ball (x,y) _) = translate x y (solidCircle radius)
最佳答案
这是您用来积分运动微分方程的算法的一个众所周知的产物。
“真正的物理”是(我只会讨论y分量)
∂y/∂t = v(t)
∂v/∂t = g
您可以通过高度和速度的离散序列对此进行建模
yi = yi − 1 + vi − 1 ⋅ Δt
vi = vi − 1 + g ⋅ Δt
这确实类似于微分方程,只是写成差商 - 但它不是同一件事(除了极限 Δt → 0):实际上,速度本身在时间过程中发生变化步,因此仅根据该时间步之前的常数 v 值来改变位置并不完全正确。简单地忽略该复杂性是一个称为 Euler's method 的近似值。 ,而且众所周知,它的性能相当糟糕。
更准确的标准替代方案是四阶 Runge-Kutta method ,尝试一下。
n.m. 关于弹跳的观点也是有效的,尽管要真正正确地做到这一点,您应该计算准确的撞击时间,既不要忽略太多的加速度,也不要得到太多实际上从未发生过的加速度.
关于haskell - Haskell中的简单弹跳球不断弹跳更高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480826/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!