好的,所以我有一堆球:
我想弄清楚的是如何制作这些圆圈:
根据他们接触的表面旋转
修复处理多个接触对象时的碰撞穿透。
编辑:这就是我所说的旋转
球 0靠在球 3 上时将逆时针旋转
球 5靠在球 0 上时将顺时针旋转
尽管对此的解决方案是通用的,但为了记录,我正在使用 Javascript 和 SVG,并且更愿意自己实现它而不是使用库。
帮助将不胜感激。谢谢!:)
以下是一些我认为可以帮助您完成任务的链接:
Box2D 有你想要的,我相信它是开源的。您可以下载文件并查看它们如何执行它们以达到您的效果。
让我知道这是否有帮助,以便更好地回答这里的问题。:)
编辑:
所以我继续思考这个问题,以便就我将如何处理它提供一些见解。看看下面的图片:
基本上,比较网格上的角度,如果球与它落下的球相比下降 +30 度,则正向旋转球。如果它下降 -30 度与它下降的球相比,然后负旋转球。我不是说这是正确的解决方案,只是想一想,这就是我解决问题的方式。
从物理学的角度来看,这听起来像是您想要同时保存线性动量和角动量。
作为起点,您需要建立对两者都建模的ODE矩阵,然后执行一些线性代数来求解它们。我个人会为该解决方案使用 Numpy/Scipy(可能使用稀疏数组)。但是有很多方法(想到同情)。您想使用哪些模块?
您需要熟悉恢复系数和摩擦系数,并决定是否也想保存动能。(你想要/关心它们是否会一直弹跳和滚动吗?)(你可能还需要能量矩阵)
您将一直在每个时间步求解这些矩阵,同时检查没有两个球心比两个半径之和更近的条件。(..如果他们这样做了,您可以调整碰撞后条件的动量和能量项)
这只是一个大项目的最简单的开始。我能问一下你为什么要从头开始做这个吗?
我建议查看游戏物理模拟书籍和文章。例如,请参阅 O'Reilly 的《游戏开发者物理学》和Gamasutra网站。