跳ねるボールのアニメーションをプログラミングしているので、できるだけリアルにしたいと思います。
ボールが上下するときの物理学を完全に理解しています。ボールは9.8メートル/秒/秒で下向きに加速します。
しかし、ボールが地面に着くと、私は迷子になります。速度を再び上向きに変換する圧縮が発生することはわかっています。その時点で、重力が作用する唯一の力になります。しかし、地面に当たるボールの圧縮とたわみをモデル化する方法がわかりません。
(また、私は厳密に垂直な線速度と加速度のみを扱っています。ボールは水平方向に移動したり回転したりしていません。また、空気抵抗の損失はごくわずかであると想定しています。)
対処すべき定数があることは知っています。ボールが圧縮にどれだけ抵抗し、バウンド中にどれだけのエネルギーが失われるかですが、それらがどのように関連しているかはわかりません。
誰かに教えてもらえますか1段落または2段落の説明および/または(a)式(e)および/または詳細を読むことができるリソースを教えてください。 (はい、私はすでに1時間ほどグーグルでそれを過ごしました)
私は理解するまでそれについて読み続けてうれしいです、私はただこの時点でどこを向いたらよいかわかりません。
よろしくお願いします!
コメント
- 速度の符号を反転して、速度をパーセンテージで下げるだけです。
- ボールの形状は常に円形ですか、それとも変形もシミュレートしますか?
- 関連する回答: physics.stackexchange.com/ a / 254379/392
- ロッドクロスはボールの跳ね返りに関する権威のようです。彼の論文の1つ: physics.usyd .edu.au / 〜cross / PUBLICATIONS / BallBounce.pdf 、およびその他のリンクを一覧表示するページ: real-world-physics-problems.com/bouncing-ball -physics.html
回答
空気の摩擦を無視していると言いますが、部分的に非弾性の衝突を想定します。つまり、問題を次のように分解できます。 2つの部分:
- ボールが地面に接触していない間、$ t_0 $での最後のバウンス後の時間$ t $での高さは$$ h(t + t_0)で与えられます。 = v_0 t- \ frac12 gt ^ 2 $$ここで、$ v_0 $はバウンス直後の速度です。この速度はバウンスごとに変化します。
- 衝撃中にボールが変形し、摩擦が発生します。衝撃時のボールの正確な形状は、ボールと床の組成に依存するため、簡単な方程式で捉えることは困難です。単純化した仮定として、ボールを「ばね定数$ k $のわずかに損失のあるばねの質量」と見なします。その場合、ボールは衝撃中に(ほぼ)減衰した単振動を示します。これは、衝撃時間が衝撃速度に独立されることを意味します(!)
反発係数はボール/サーフェスのパラメータであり、バウンス直後の速度を直前の速度で割ったものを反映します。ゴルフボールの場合、これは0.8まで高くなる可能性があります。テニスボールの場合、約0.75です。
5 mの高さからボールを落とした場合、$ \ rho = 0.75 $を使用します(そして$ g = 10〜m / s ^ 2 $を利便性)10 m / sの速度で1秒後に着陸し、バウンス(短時間$ \ Delta t $)の後、より低い速度$ v_1 = 7.5 m / s $で再び上昇します。次の跳ね返りまで空中で過ごした時間は、$$ t_1 = 2 \ frac {v_1} {g} = 2 \ rho \ frac {v_0} {g} $$
ボールの間が地面と接触している場合、その中心はほぼ正弦波状に移動すると見なすことができます。前述したように、重要なことは、接触時間が液滴の高さに依存しないことです(線形ばね定数の仮定に基づく)。実際には、ボールがさらに変形すると、ばね定数が増加します。これにより、衝撃速度が高くなるにつれて、実際には接触時間が短くなります。ただし、問題になる可能性が低いシミュレーションの場合。
上記から「数学モデル」に移行するには、次のPythonコードを必要に応じて変更することをお勧めします。
from math import sqrt import matplotlib.pyplot as plt h0 = 5 # m/s v = 0 # m/s, current velocity g = 10 # m/s/s t = 0 # starting time dt = 0.001 # time step rho = 0.75 # coefficient of restitution tau = 0.10 # contact time for bounce hmax = h0 # keep track of the maximum height h = h0 hstop = 0.01 # stop when bounce is less than 1 cm freefall = True # state: freefall or in contact t_last = -sqrt(2*h0/g) # time we would have launched to get to h0 at t=0 vmax = sqrt(2 * hmax * g) H = [] T = [] while(hmax > hstop): if(freefall): hnew = h + v*dt - 0.5*g*dt*dt if(hnew<0): t = t_last + 2*sqrt(2*hmax/g) freefall = False t_last = t + tau h = 0 else: t = t + dt v = v - g*dt h = hnew else: t = t + tau vmax = vmax * rho v = vmax freefall = True h = 0 hmax = 0.5*vmax*vmax/g H.append(h) T.append(t) print("stopped bouncing at t=%.3f\n"%(t)) plt.figure() plt.plot(T, H) plt.xlabel("time") plt.ylabel("height") plt.title("bouncing ball")
このコードは次のプロットを生成します:
答え
難しいのは、ボールが壁に接触しているときです。あなたが考えることができるいくつかのこと。
- 弾性の影響。この場合、ボールを弾性ばねとして扱うことができます。速度で壁に衝突すると、運動エネルギーがばねの位置エネルギーに変換され、最大変形に達した後、ボールが空間に跳ね返ります。変形方向は壁に垂直です。
- 非弾性衝撃。これは、ボールが運動エネルギーのごく一部しか回復しないことを除いて、上記と同様です。これは現実に近いです。損失は通常、反発係数を使用して説明されます。
- 摩擦による非弾性衝撃。ボールが壁に斜めに当たると、ボールは表面を滑ることができます。これはより現実に近くなります。
- 空気抵抗。ボールがスペースで動いているとき、それを遅くするための空気抗力があります。
コメント
- 申し訳ありませんが、'十分に明確ではなかったと思います。 '部分的に非弾性の影響について話しています。私の元の投稿から" …バウンス中に失われるエネルギー量… "。また、元の投稿で、私は'空気抵抗を無視していると述べました(" … I ' mは空気抵抗の損失を無視できると仮定しています… ")、そして私は'横方向の運動量をモデル化しようとはしていません("摩擦による非弾性衝撃")。地面との衝突中に発生する圧縮、減速、減圧、加速、およびプロセス全体に固有のエネルギーの損失をモデル化したいだけです。
回答
Visual Solutions(現在はAltair)はVisSimソフトウェアを作成します。跳ねるボールをシミュレートするために使用したデモブロック図は次のとおりです。
$ 1 / s $ブロックは、VisSimライブラリのインテグレータブロックです。
これらのパラメータを使用したバウンドボールのプロットを以下に示します。
これを実行することに興味がある場合は、デモにインストールと60日間の無料トライアルをダウンロードできますこちら