15

好的,所以我有一堆球:

火球


我想弄清楚的是如何制作这些圆圈:

  • 根据他们接触的表面旋转

  • 修复处理多个接触对象时的碰撞穿透。


编辑:这就是我所说的旋转

替代文字

  • 球 0靠在球 3 上时将逆时针旋转

  • 球 5靠在球 0 上时将顺时针旋转


尽管对此的解决方案是通用的,但为了记录,我正在使用 Javascript 和 SVG,并且更愿意自己实现它而不是使用库。

帮助将不胜感激。谢谢!:)

4

3 回答 3

6

以下是一些我认为可以帮助您完成任务的链接:

Box2D

高级字符物理

Javascript 球模拟

Box2D 有你想要的,我相信它是开源的。您可以下载文件并查看它们如何执行它们以达到您的效果。

让我知道这是否有帮助,以便更好地回答这里的问题。:)

编辑:

所以我继续思考这个问题,以便就我将如何处理它提供一些见解。看看下面的图片:

基本上,比较网格上的角度,如果球与它落下的球相比下降 +30 度,则正向旋转球。如果它下降 -30 度与它下降的球相比,然后负旋转球。我不是说这是正确的解决方案,只是想一想,这就是我解决问题的方式。

替代文字

于 2010-01-29T06:50:40.597 回答
6

从物理学的角度来看,这听起来像是您想要同时保存线性动量和角动量

作为起点,您需要建立对两者都建模的ODE矩阵,然后执行一些线性代数来求解它们。我个人会为该解决方案使用 Numpy/Scipy(可能使用稀疏数组)。但是有很多方法(想到同情)。您想使用哪些模块?

您需要熟悉恢复系数和摩擦系数,并决定是否也想保存动能。(你想要/关心它们是否会一直弹跳和滚动吗?)(你可能还需要能量矩阵)

您将一直在每个时间步求解这些矩阵,同时检查没有两个球心比两个半径之和更近的条件。(..如果他们这样做了,您可以调整碰撞后条件的动量和能量项)

这只是一个大项目的最简单的开始。我能问一下你为什么要从头开始做这个吗?

于 2010-01-24T17:30:31.883 回答
3

我建议查看游戏物理模拟书籍和文章。例如,请参阅 O'Reilly 的《游戏开发者物理学》Gamasutra网站。

于 2010-01-24T17:47:28.723 回答