У меня проблемы с пониманием того, как смоделировать такую ситуацию: http://phet.colorado.edu/sims/dedensity-and-buoyancy/buoyancy_en.html
Суть программы в том, чтобы сделать симулятор - как тот, что по ссылке. Я хочу сохранить реалистичность и использовать Python. Я хочу нарисовать симуляцию в Pygame.
В моей программе я прошу пару переменных; масса и радиус. Радиус будет использоваться для расчета объема сферы, а масса будет использоваться для расчета плавучести, силы тяжести и ускорения.
Но дело в том, что для того, чтобы все было в единицах СИ, я прошу радиус в метрах. Делая это с радиусом менее 10 см, получается действительно небольшое число. И когда я использую модуль Pygame для рисования сферы размером 0,1 м, это терпит неудачу. Поэтому вместо этого мне нужно было использовать более крупный масштаб.
Итак, вот моя основная проблема. Насколько точно масштабировать сферу? Скажем, я хотел определить 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
в пиксели при рисовании. - person Andy Hayden   schedule 13.09.2012