Verlet integration (Verlet 积分法)

1010 篇文章 11 订阅
126 篇文章 6 订阅

http://blog.csdn.net/u014327084/article/details/41984719


如果你之前有过开发游戏,你写的代码可能看起来有些像这样:

[html]  view plain  copy
  1. _vx += _accelerationX;  
  2. _vy += _accelerationY;  
  3. player.x += _vx;  
  4. player.y += _vy;  
vx 是玩家对象的水平速度(horizontal velocity),vy是它的垂直速度(vertical velocity)。

玩家的移动是通过它的当前位置加上他的速度。如果你执行一个帧循环,玩家角色将会发生移动。

这些代码的本质是说:“这里有一个对象,它是在一定的速度和一定的方向移动。所以我们知道下一帧它会出现在那里。”

这很有道理。如果你开车每小时100KM,你知道,10分钟就会驶过10KM,简单的东西!

这是一个被称作Euler integration(欧拉积分——以18世纪数学家莱昂纳多·欧拉命名)的定理用来计算物体位置。它是通过一个对象基于它的当前位置和当前速度来预测它的位置。

它不会让处理器压力过大,易于实现,所以被广泛使用。如果速度是常速它是稳定的,但是如果速度由于摩擦力和加速度发生改变,它将会变得非常不稳定。在复杂的有大量移动物体的物理场景中,它也会有一个崩溃的趋势。


欧拉积分的问题

想象一下,你驾驶着一辆时速100公里的汽车。你的朋友,雷昂纳多 欧拉,酝酿了一个通过每10分钟记录一次你当前位置来预测你下一个位置的计划。他需要每次记录推测出你下一次的位置在哪里,但这所有的工作都来源于你此刻的速度和位置。

听起来足够合理(reasonable),但是问题就出在物理力学,就像摩擦力(friction)和风的阻力(resistance),它们作用于你开车的整个过程,并且欧拉同学木有想到,每隔10分钟进行快照的间隔。这也就意味着你的速度(guarantee)并不能保持不变,你停止的最终位置实际上不是欧拉同学理想的地方。如果你决定为了喝杯咖啡或者吃个面包圈而靠边停车(pull over )了又会怎样呢?

雷昂纳多能解决的是如此的少。他的记录越频繁越能提高预测你的位置。例如每时每刻都在记录。但是任然有很大一片灰色地带(

一般来说,大家对是非的认知很明朗,不是对就是错,不是白就是黑。。其实在这两个极端中间有个很大的灰色地带,他暧昧不明,难以界定。可是说是黑白之间的缓冲区和过渡区吧

他没有办法去知道一些意外情况的发生,像是咖啡和面包圈的情况。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值