水蟒物理模拟器

2024-09-29 21:54:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在理解如何模拟这样的情况时遇到了问题:http://phet.colorado.edu/sims/density-and-buoyancy/buoyancy_en.html

这个程序的重点是制作一个模拟器-就像链接中的模拟器。我想保持它的真实性并使用Python。我想在Pygame中绘制模拟。在

在我的程序中,我需要几个变量:质量和半径。半径将用于计算球体的体积,质量将用于计算浮力、重力和加速度。在

但问题是,为了保持所有东西的国际单位制,我要求半径以米为单位。这样做的同时保持我的半径在10厘米以下,这样的数字就很小了。当我使用Pygame模块绘制一个0.1m大小的球体时,它失败了。所以我需要用更大的比例尺来代替。在

所以我的主要问题来了。我应该如何缩放球体?假设我想把100个像素定义为1米。然后我要把半径乘以100,因为这就是比例,但是既然球体更大了,速度也应该乘以100吗?在

我真的很困惑!谢谢你的时间。在

不管怎样,不知道你是否需要看这个。
计算.py在

import math

class Formulas():
    def __init__(self):
        self.pi = 3.1415926535
        self.gravity = 9.82 #m/s^2
        self.density_water = 1000.0 #kg/m^3
        self.density_air   = 1.29 #kg/m^3
        self.drag_sphere   = 0.47

    def object_buoyancy(self, volume, medium_density):
        buoyancy = volume * medium_density * self.gravity #N
        return buoyancy

    def object_gravity(self, mass):
        gravity_force = mass * self.gravity #N
        return gravity_force

    def object_volume_sphere(self, radius):
        volume  = 1.3333333 * self.pi * math.pow(radius, 3) #m^3
        return volume

    def object_mass(self, density, volume):
        mass = volume * density #kg
        return mass

    def object_acceleration(self, gravity_force, buoyancy, mass):
        total_force = gravity_force - buoyancy #N
        acceleration = total_force / mass #m/s^2
        return acceleration

    def object_speed(self, acceleration, time, scale):
        speed  = acceleration * (float(time)/1000.0) #m/s
        return speed

    def surface_area(self, radius):
        area = 4 * self.pi * math.pow(radius, 2)
        return area

Tags: selfreturnobjectdef半径mathdensitygravity
1条回答
网友
1楼 · 发布于 2024-09-29 21:54:01

像许多物理问题一样,这个问题可以用dimensional analysis来解决。在

让我们看看你定义的那些常数:

self.pi = 3.1415926535
self.gravity = 9.82 #m/s^2
self.density_water = 1000.0 #kg/m^3
self.density_air   = 1.29 #kg/m^3
self.drag_sphere   = 0.47

为了保持一致并缩放所有距离,以便1 m = 100 px,我们需要缩放常量:

^{pr2}$

唯一需要做的就是将radius变量增加100倍。在那之后,你的其他计算结果将一致:

  1. 你的体积计算是正确的,所以
  2. 你的质量和表面积计算会改变,所以
  3. 你的重力和浮力会改变,所以
  4. 你的加速度会改变,所以
  5. 最后,你的速度是正确的。在

在你的公式/方法中,我看不到你的medium_density是在哪里设置的,所以我也必须改变。但是,最后,你要做的就是缩放所有以“距离”为单位的输入,你的输出变量将被正确缩放。在

相关问题 更多 >

    热门问题