我在理解如何模拟这样的情况时遇到问题:http://phet.colorado.edu/sims/density-and-buoyancy/buoyancy_en.html
该程序的目的是制作一个模拟器 - 就像链接中的那个。我想保持现实并使用 Python。我想在Pygame中绘制模拟.
在我的程序中,我需要几个变量;质量和半径。半径将用于计算球体的体积,质量将用于计算浮力、重力和加速度。
但问题是,为了将所有内容都保留在 SI 单位中,我要求以米为单位的半径。这样做的同时将我的半径保持在 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
最佳答案
就像物理学中的许多问题一样,这个问题可以使用 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
,我们需要缩放常量:
self.pi = 3.1415926535
self.gravity = 982.0 #px/s^2
self.density_water = 0.001 #kg/px^3
self.density_air = 0.00000129 #kg/px^3
self.drag_sphere = 0.47
您唯一需要做的另一件事是将您的 radius
变量增加 100 倍。之后,您的其余计算将符合要求:
- 你的体积计算是正确的,所以
- 您的质量和表面积计算将会改变,因此
- 你的重力和浮力会改变,所以
- 你的加速度会改变,所以
- 最后,您的速度将是正确的。
在你的方程式/方法中,我没有看到你的 medium_density
设置在哪里,所以我也必须改变。但是,最后,您所要做的就是缩放所有具有“距离”单位的输入,并且您的输出变量将被正确缩放。
关于python - Anaconda 中的物理模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396244/