放物運動の演算
問 初速 v m/s でX軸正の方向からθ(=theta)度の角度で発射された物体のs秒後の位置を求める関数を定義してください。Y軸負の方向に9.8 m/s^2 の重力加速度が働いているものとします。空気抵抗とか物体のモーメントとかややこしいのは勿論なしです。
解答例 速度をXYそれぞれの軸方向の成分に分解するために三角関数を利用します。X軸方向はそのまま、Y軸方向はそこから、重力加速度の分を減算した値がそれぞれの速度になります(Y軸方向は速度が時間の関数になりますね)。あとは、「速さ x 時間 = 距離」の公式でそれぞれの座標が求まります。
RubyのMathモジュールに用意された三角関数の引数の単位はラジアンですので、その部分の変換も忘れずに。
v = 120
s = 6
theta = Math::PI / 180.0 * 60
G = 9.8
x = v * Math.cos(theta) * s
y = (v * Math.sin(theta) - G * s) * s
puts "v = #{v},theta = #{theta},s = #{s}"
puts "(x,y) = (#{x},#{y})"
おまけ 上記の図はShoesというRubyのGUIライブラリをインストールして描画しています。
def o(x,y)
oval(left: 10+x-3, top: 400-y-3,radius: 5)
end
Shoes.app do
v = 120
G = 9.8
theta = Math::PI / 180.0 * 60.0
line(10,0,10,410)
line(0,400,400,400)
(0..10).each do |s|
x = v * Math.cos(theta) * s
y = (v * Math.sin(theta) - G * s) * s
o(x,y)
end
end
参考URL
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について