6

このような状況をシミュレートする方法を理解するのに問題があります: http://phet.colorado.edu/sims/density-and-buoyancy/buoyancy_en.html

プログラムのポイントは、リンクにあるようなシミュレーターを作成することです。私はそれを現実的に保ち、Python を使用したいと考えています。Pygameでシミュレーションを描画したい。

私のプログラムでは、いくつかの変数を要求します。質量と半径。半径は球の体積を計算するために使用され、質量は浮力、重力、加速度を計算するために使用されます。

しかし問題は、すべてを SI 単位で保持するために、半径をメートル単位で指定することです。半径を 10cm 未満に保ちながらこれを行うと、非常に小さな数になります。また、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
4

1 に答える 1

2

物理学の非常に多くの問題と同様に、これは次元解析を使用して解決できます。

定義した定数を見てみましょう。

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 倍にするだけです。その後、残りの計算は次のようになります。

  1. あなたのボリューム計算は正しいので、
  2. 質量と表面積の計算が変わるので、
  3. 重力と浮力が変わるので、
  4. 加速度が変わるので
  5. 最後に、速度が正しくなります。

medium_densityあなたの方程式/メソッドでは、あなたが設定されている場所がわからないので、私も変更する必要があります。しかし、最終的には、「距離」の単位を持つすべての入力をスケーリングするだけで、出力変数は正しくスケーリングされます。

于 2012-10-04T20:33:41.977 に答える