好的,我有一堆球:
我正在尝试弄清楚如何使这些圆:
根据它们接触的表面旋转
在处理多个接触对象时,修复碰撞穿透。
编辑: 这就是我所说的旋转
Ball 0 倾斜在 Ball 3 上时会逆时针旋转
Ball 5 倾斜在Ball 0 上时会顺时针旋转
虽然解决方法是通用的,但仅供记录,我正在使用JavaScript和SVG,并且更喜欢自己实现而不是使用库。
非常感谢您的帮助。谢谢!:)
好的,我有一堆球:
我正在尝试弄清楚如何使这些圆:
根据它们接触的表面旋转
在处理多个接触对象时,修复碰撞穿透。
编辑: 这就是我所说的旋转
Ball 0 倾斜在 Ball 3 上时会逆时针旋转
Ball 5 倾斜在Ball 0 上时会顺时针旋转
虽然解决方法是通用的,但仅供记录,我正在使用JavaScript和SVG,并且更喜欢自己实现而不是使用库。
非常感谢您的帮助。谢谢!:)
从物理学角度来看,您想要保守线性和角动量momentum。
作为起点,您需要建立模拟这两个方面的ODE矩阵,然后进行一些线性代数运算来解决它们。我个人会使用Numpy/Scipy(可能使用稀疏数组)来进行求解。但是还有许多方法(例如sympy)。您想要使用哪些模块?
您需要熟悉coefficient of restitution和coefficient of friction,并决定是否也要保留动能。(您是否希望/关心它们永远弹跳和滚动?)(您可能还需要能量矩阵)
你将在每个时间步骤解决这些矩阵,同时检查没有两个球心距离小于两个半径之和的条件。(如果确实如此,您需要调整动量和能量术语以满足碰撞后的条件)以下是我认为会对你的探索有所帮助的一些链接:
Box2D有你需要的东西,而且我相信它是开源的。你可以下载文件并查看它们如何做到达到你想要的效果。
如果这有帮助,请让我知道,我正在努力回答这里的问题。 :)
编辑:
所以我继续思考了一下,以便给出一些我的方法。请看下面的图片:
基本上,比较网格上的角度,如果球下落与其所在的球相比增加了30度,则正向旋转球。如果它下落与其所在的球相比减少了30度,则负向旋转球。我并不是说这是正确的解决方案,但只是考虑一下,这是我一开始解决问题的方式。