当前位置: 首页 > 知识库问答 >
问题:

python球物理模拟

许华清
2023-03-14

我已经在
http://www.petercollingridge.co.uk/pygame-physics-simulation/
上看到了Peter Colling Ridge编写的非常棒的教程,我正在扩展PyParticles脚本
代码可以在站点上获得(免费),我使用的是pyparticles4.py

粒子类
具有半径、质量、速度、位置的圆形2D物体
Spring类
捆绑2个物体(粒子)并利用胡克定律(F=-kx)确定它们之间相互作用的Spring
环境类
粒子相互作用的环境

我想知道我是否可以使用两个粒子,并使一个‘棒’类(像教程中的Spring类),有一个特定的长度,不允许粒子靠近到比(指定的)长度更远的地方。
同时,
对每个粒子施加一个力(当需要时),这样,如果一个被拉向左边,那么另一个也是如此,但现实地..
很像如果两个不同类型的球被连接(从中心)使用钢棒,但在二维..
我不想使用第三方模块

事先谢谢..

编辑/更新:
尝试应用约束定理(失败)
以下是代码:

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

共有1个答案

吕皓
2023-03-14

2D中的杆有3个自由度(2个速度/位置+1个旋转/角频率)。
我将以通常的方式表示中心的位置,该位置通过力来改变,并使用旋转(为简单起见,围绕系统中心)变量来计算粒子的位置。
旋转通过力来改变

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

哪里

ang_accel是角加速度

 类似资料:
  • 我正在为一项大学作业创建一个项目,我遇到了一点障碍。这个问题很小,很可能被认为是没有被注意到的,但它仍然困扰着我,作为一个程序性的人,在完成工作方面,我不能继续做任何事情,直到它被解决。 我有桨和球代码工作良好,以及一个简单的角速度的基础上,球击中桨,但我的问题是当球击中砖块。代码大多有效,似乎完美无瑕,但当球做以下两件事之一时,情况会发生变化: 击中砖块的一个角可能会错误地扭转球的速度轴 同时击

  • 物理模拟 即使使用了基于定时器的动画来复制第10章中关键帧的行为,但还是会有一些本质上的区别:在关键帧的实现中,我们提前计算了所有帧,但是在新的解决方案中,我们实际上实在按需要在计算。意义在于我们可以根据用户输入实时修改动画的逻辑,或者和别的实时动画系统例如物理引擎进行整合。 Chipmunk 我们来基于物理学创建一个真实的重力模拟效果来取代当前基于缓冲的弹性动画,但即使模拟2D的物理效果就已近极

  • 考虑一个3D太阳系模拟。 我的模拟循环: null 提升FPS 降低我的行星的速度(降低引力常数??) 与呈现循环一起运行相比,有一个单独的模拟循环,但速度更快 对于任何感兴趣的人,我使用的是three.js。

  • 到目前为止,我们所看到的细胞自动机不是物理模型;也就是说,他们不打算描述现实世界中的系统。 但是一些 CA 用作物理模型。 在本章中,我们考虑一个 CA,它模拟扩散(散开)并相互反应的化学物质,这是 Alan Turing 提出的过程,用于解释一些动物模式如何发展。 我们将试验一种 CA,它模拟通过多孔材料的渗透液体,例如通过咖啡渣的水。 这个模型是展示相变行为和分形几何的几个模型中的第一个,我将

  • 本文向大家介绍meteor 全球出版物,包括了meteor 全球出版物的使用技巧和注意事项,需要的朋友参考一下 示例 全局发布不具有名称,并且不需要从连接的客户端进行订阅,因此,一旦客户端连接到服务器,该连接就可供连接的客户端使用。 为了实现这一目标,一个简单的名称的发表为null像这样            

  • 我正在创建一个突破游戏来熟悉Java。目前我已经把一切都做好了,但我注意到球似乎是朝着同一个方向飞的。 我已经对它进行了编程,当球碰到球拍时,Y速度是相反的。这是可行的,但球似乎遵循相同的路线。。。 如何让碰撞看起来更真实? 当球击中桨的左侧时,我想将其重新定向到左侧,但我不确定在哪个角度反射它。有人能提供一个公式来帮助我计算出当球接触桨的左侧或右侧时需要引导的角度吗?