パスワードを忘れた? アカウント作成
668561 journal

bluedwarfの日記: スペースキャッチボール 2

日記 by bluedwarf
物理の問題(というか考察してみなさい!っていうような感じ)で、
「まわりに何もない宇宙空間で、2人の宇宙飛行士がお互いに静止していた。そして、2人がくりかえしキャッチボールをした。このときの2人のボールの運動について物理学的に解説せよ。」
なーんていうのがあったから、とりあえず作用・反作用の法則に注意しながら、人がボールを投げる(とる)瞬間の力積は互いに逆向きで同じ大きさであることから運動量保存則を説明し、また、ボールをとるということは、ボールをとったあとのとった人とボールの速度が等しくなることに注意して、この事象を説明。
ボールを投げるときに常に同じ力積しか加えられないとしたら、いつかは、人の速さがボールの速さよりも大きくなって、ボールが人に追い付かなくなる(キャッチボールが成立しなくなる)ことも考察し、さらに運動エネルギーはどんどんと大きくなっていくことも併せて考察。

それだけであきたらない私は、一体何回ぐらいキャッチボールをしたらキャッチボールが成立しなくなるかを具体的な数値で考えたくて、Rubyでちゃっちゃとコードを組んでしまった。(コードを書いている場合ではないけれど、こういう考察の仕方はいづれ役に立つのではないかとおもってやってみる)
# ほとんどコメントだけれど。

以下のコード、高校物理が楽しい人以外には全く関係のないものですが、勝手に使ってください。プログラム自体は本当に初心者的な書き方しかしていないので、自分でコードが組めるなら自分で組んだ方が勉強になるかも。
(運動エネルギーについての出力がないので、それを付け加えるとよいかも)

まぁ、いろいろと数値をいれてみれば分かるんですけど、ボールの質量が人よりも大きい場合にはすぐにキャッチボールができなくなります。
それと、人1と人2が加える力積の比が同じならばどんな力積を加えようとも、キャッチボールが成立しなくなる回数が同じになります。(ちょっと驚いた)
ついでに、全体の運動量が微妙に0からずれています。が、ちゃんと小さな値になるので無視しましょう。

-----
#!/usr/bin/ruby

# 宇宙でキャッチボール!

# Usage
# ./space_catch_ball 人1の質量 人2の質量 ボールの質量 人1がボールを投げるときの力積 人2がボールを投げるときの力積

mass_man1 = ARGV[0].to_f
mass_man2 = ARGV[1].to_f
mass_ball = ARGV[2].to_f
release_impulse1 = ARGV[3].to_f
release_impulse2 = ARGV[4].to_f

puts "人1の質量 = #{mass_man1}[Kg]"
puts "人2の質量 = #{mass_man2}[Kg]"
puts "ボールの質量 = #{mass_ball}[Kg]"
puts "人1がボールを投げるときの力積 = #{release_impulse1}[N・s]"
puts "人2がボールを投げるときの力積 = #{release_impulse2}[N・s]"
puts ""

velocity_man1 = 0
velocity_man2 = 0
velocity_ball = 0

# 始めの状態(人1から人2に向かう方向が正)
#
# -------------------------------------> +
# ----- -------- -----
# |人1| |ボール| |人2|
# ----- -------- -----
#
# * はじめは人1がボールを持っていて、人1も人2もボールも速度は0

count = 0

while true do

    count = count + 1

    # 人1がボールを投げる

    # 人1がボールに加える力積 Fdt
    # ボールの質量 m
    # 投げる直前のボールの速度 = v
    # 投げた直後のボールの速度 = v'
    # Fdt = mv' - mv
    # -> v' = (Fdt) / m + v
    velocity_ball = (release_impulse1) / mass_ball + velocity_ball

    # ボールが人1に加える力積 -Fdt
    # 人1の質量 M
    # 投げる直前の人の速度 = V
    # 投げた直後の人の速度 = V'
    # -Fdt = MV' - MV
    # -> V' = (-Fdt) / M + V
    velocity_man1 = (-release_impulse1) / mass_man1 + velocity_man1

    puts "人1がボールを投げる(#{count}回目)"
    puts "人1の速度 = #{velocity_man1}[m/s]"
    puts "人2の速度 = #{velocity_man2}[m/s]"
    puts "ボールの速度 = #{velocity_ball}[m/s]"
    puts "運動量の和 = #{mass_man1 * velocity_man1 + mass_man2 * velocity_man2 + mass_ball * velocity_ball}[Kg・m/s]"
    puts ""

    # 人2の速さがボールの速さよりも大きくなったら終了
    if velocity_man2 >= velocity_ball then
        break
    end

    # 人2がボールをとる

    # ボールの質量 m
    # とる直前のボールの速度 = v
    # とった直後のボールの速度 = とった直後の人の速度 = v'
    # 人2の質量 M
    # とる直前の人の速度 = V
    # MV + mv = (M + m) * v'
    # -> v' = (MV + mv) / (M + m)
    velocity_ball = velocity_man2 = (mass_man2 * velocity_man2 + mass_ball * velocity_ball) / (mass_man2 + mass_ball)

    puts "人2がボールをとる(#{count}回目)"
    puts "人1の速度 = #{velocity_man1}[m/s]"
    puts "人2の速度 = #{velocity_man2}[m/s]"
    puts "ボールの速度 = #{velocity_ball}[m/s]"
    puts "運動量の和 = #{mass_man1 * velocity_man1 + mass_man2 * velocity_man2 + mass_ball * velocity_ball}[Kg・m/s]"
    puts ""

    # 人2がボールを投げる

    # 人2がボールに加える力積 -Fdt
    # ボールの質量 m
    # 投げる直前のボールの速度 = v
    # 投げた直後のボールの速度 = v'
    # -Fdt = mv' - mv
    # -> v' = (-Fdt) / m + v
    velocity_ball = (-release_impulse2) / mass_ball + velocity_ball

    # ボールが人2に加える力積 Fdt
    # 人2の質量 M
    # 投げる直前の人の速度 = V
    # 投げた直後の人の速度 = V'
    # Fdt = MV' - MV
    # -> V' = (Fdt) / M + V
    velocity_man2 = (release_impulse2) / mass_man2 + velocity_man2

    puts "人2がボールを投げる(#{count}回目)"
    puts "人1の速度 = #{velocity_man1}[m/s]"
    puts "人2の速度 = #{velocity_man2}[m/s]"
    puts "ボールの速度 = #{velocity_ball}[m/s]"
    puts "運動量の和 = #{mass_man1 * velocity_man1 + mass_man2 * velocity_man2 + mass_ball * velocity_ball}[Kg・m/s]"
    puts ""

    # 人1の速さがボールの速さよりも大きくなったら終了
    # (人1の速度とボールの速度はマイナス向き)
    if (-velocity_man1) >= (-velocity_ball) then
        break
    end

    # 人1がボールをとる

    # ボールの質量 m
    # とる直前のボールの速度 = v
    # とった直後のボールの速度 = とった直後の人の速度 = v'
    # 人1の質量 M
    # とる直前の人の速度 = V
    # MV + mv = (M + m) * v'
    # -> v' = (MV + mv) / (M + m)
    velocity_ball = velocity_man1 = (mass_man1 * velocity_man1 + mass_ball * velocity_ball) / (mass_man1 + mass_ball)

    puts "人1がボールをとる(#{count}回目)"
    puts "人1の速度 = #{velocity_man1}[m/s]"
    puts "人2の速度 = #{velocity_man2}[m/s]"
    puts "ボールの速度 = #{velocity_ball}[m/s]"
    puts "運動量の和 = #{mass_man1 * velocity_man1 + mass_man2 * velocity_man2 + mass_ball * velocity_ball}[Kg・m/s]"
    puts ""

end
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by kzk (16011) on 2003年07月30日 1時22分 (#368296) 日記
    式作ってみます。(作れるのか?)

    1.とりあえずボールの重さには反比例してそう。
    ./space.ruby 60 60 2 10 10 - 11回
    ./space.ruby 60 60 1 10 10 - 22回

    2.人1の重さ×人2の重さのルートに比例してそう。
    ./space.ruby 10 10 1 10 10 - 4回
    ./space.ruby 20 20 1 10 10 - 8回
    ./space.ruby 40 40 1 10 10 - 15回

    3.力積の関係がいまいちわかりません。
    比率の何乗であることは確かなんですけど。
    約数の多い数に合わせて色々やってみたんですけど法則は見付からず。
    ./space.ruby 67 67 1 80 80 - 24回
    ./space.ruby 67 67 1 64 64 - 24回 64/64 = 1
    ./space.ruby 67 67 1 24 64 - 12回 24/64 = 3/8 = 0.375

    ((mass_man1 * mass_man2)のルート) * mass_ball * ((release_impulse1 / release_impulse2)の?乗) = 回数

    まぁ?に値入れていけばぴったり来るのがあるだろうってことで(おぃ

    # 一緒の時最大値を取るってのがきにかかります
    # dewadewa
    • 物理の先生にkzkさんが予測してくれたこの法則性に関することを話しましたが、何回でキャッチボールが成立しなくなるかについては考えたことがなかったらしく、お返事はまた後日とのこと。

      私も考えてみたいのですが、ちょっと時間がなくって...そのうちデータをグラフにしてみてまた自分で考察してみます。

      > # 一緒の時最大値を取るってのがきにかかります
      ちなみに、これについてはそんなに難しく考える必要はないと思います。一緒のときと、そうでないときでのそれぞれがボールを投げたときにその人自身の速度がどうなるかということと、ボールの速度がどうなるかということを考察すれば、(2人の質量が同じであると仮定して)ボールを投げるときにボールに与える力積が等しいときに最大値をとることは容易に説明できます。

      だとするならば、
      > ((mass_man1 * mass_man2)のルート) * mass_ball * ((release_impulse1 / release_impulse2)の?乗) = 回数

      という式において、2人の質量が同じとき
      (release_impulse1 / release_impulse2)の?乗
      の最大値が1にならなければいけないのですが...そいういうわけではなさそうですね。
      あえてrelease_impulse1 release_kmpulse2を条件にすることもできるけれど、私はなんとなくそれはナンセンスな気がします。

      それにしても、こうやっていろいろ考察しながら物理法則について考えるのは楽しいですね。逆に、最近は、物理の「入試問題」を解くのがつまらなくなってきました。
      # いかんいかん。
      --
      // Give me chocolates!
      親コメント
typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...