我遇到了如何模拟这种情况的问题:http://phet.colorado.edu/sims/density-and-buoyancy/buoyancy_en.html。该程序的目的是制作一个类似于链接中的模拟器,我想保持真实并使用Python,并在Pygame中绘制模拟。
在我的程序中,我要求输入几个变量:质量和半径。半径将用于计算球体的体积,而质量将用于计算浮力、重力和加速度。
但问题是,为了保持所有单位为国际单位制(SI-unit),我要求以米为单位输入半径。在将半径保持在小于10厘米的情况下,会得到一个非常小的数字。当我使用Pygame模块绘制大小为0.1m的球体时,它就失败了。因此,我需要使用更大的比例尺。
现在出现了主要的问题。我应该如何缩放球体?假设我想定义100像素为1米。然后,我将不得不将我的半径乘以100,因为那就是比例尺。但是现在球体变大了,速度也应该乘以100吗?
我已经感到非常困惑了!感谢您的时间。
不知道是否需要查看这个,无论如何。
Calculations.py
在我的程序中,我要求输入几个变量:质量和半径。半径将用于计算球体的体积,而质量将用于计算浮力、重力和加速度。
但问题是,为了保持所有单位为国际单位制(SI-unit),我要求以米为单位输入半径。在将半径保持在小于10厘米的情况下,会得到一个非常小的数字。当我使用Pygame模块绘制大小为0.1m的球体时,它就失败了。因此,我需要使用更大的比例尺。
现在出现了主要的问题。我应该如何缩放球体?假设我想定义100像素为1米。然后,我将不得不将我的半径乘以100,因为那就是比例尺。但是现在球体变大了,速度也应该乘以100吗?
我已经感到非常困惑了!感谢您的时间。
不知道是否需要查看这个,无论如何。
Calculations.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
m
,然后再将m
转换为像素(px)。 - Andy Hayden