蟒蛇球的物理模拟(python ball physics simulation)

2019-07-17 18:54发布

我已经看到了由彼得·科林岭在伟大的教程
http://www.petercollingridge.co.uk/pygame-physics-simulation/
而我延长PyParticles脚本
该代码可在网站(免费),我使用PyParticles4.py上

在本教程中使用的类

粒子类
半径,质量,速度,位置圆形2D对象
该Spring类
结合2个对象(颗粒),并使用甲弹簧胡克定律 (F = -kx),以确定它们之间的相互作用
环境类
在粒子相互作用的环境

我在想,如果我可以使用2个粒子,并都有一个明确的长度并没有让颗粒走近走得更远比(规定)长度的“棒”类(如本教程中的Spring类)。
也,
底肥的力(当需要时),以每个粒子,使得如果一个被向左拉动,所以确实其他,但现实..
很像如果2种不同类型的球用钢棒接合(从中心),但在2-d ..
而且我不希望使用第三方模块

提前致谢..

编辑/ UPDATE:
尝试应用约束定理(失败)
下面的代码:

class Rod:
    def __init__(self, p1, p2, length=50):
        self.p1 = p1
        self.p2 = p2
        self.length = length

    def update(self):
        'Updates The Rod and Particles'
        # Temp store of co-ords of Particles involved
        x1 = self.p1.x
        x2 = self.p2.x
        ###### Same for Y #######
        y1 = self.p1.y
        y2 = self.p2.y

        # Calculation of d1,d2,d3 and final values (x2,y2) 
        # from currently known values(x1,y1)...
        # From Constraint algorithm(see @HristoIliev's comment)
        dx1 = x2 - x1
        dy1 = y2 - y1
        # the d1, d2, d3
        d1 = math.hypot(dx1,dy1)
        d2 = abs(d1)
        d3 = (d2-self.length)/d2
        x1 = x1 + 0.5*d1*d3
        x2 = x2 - 0.5*d1*d3
        y1 = y1 + 0.5*d1*d3
        y2 = y1 - 0.5*d1*d3

        # Reassign next positions
        self.p1.x = x1
        self.p2.x = x2
        ###### Same for Y #######
        self.p1.y = y1
        self.p2.y = y2

Answer 1:

在2D甲杆具有3个自由度(2种速度/位置+ 1个旋转/角频率)。
我将代表其通过力以通常的方式修改的中心的位置,并计算使用旋转的粒子的位置(为简单起见,关于系统的中心)的变量。
旋转是由部队通过修改

ang_accel = F * r * sin (angle(F,r)) / (2*M * r^2)

哪里

ang_accel是角加速度

F是作用于一个特定的球所以有2米上的力的转矩 *加起来作为有两个力,为了更新该中心的位置加起来(矢量明智)。

r是长度的一半
angle(F,r)是力矢量和径向矢量之间的角度(从中心到受到其力的粒子),

以便
F * r * sin (angle(F,r))是转矩绕中心,和
2*M * r^2是惯性力矩的围绕中心两个点的系统。



文章来源: python ball physics simulation