~目次~
- 対象
- pythonシミュに興味がある方
- pythonの基礎的な文法を把握している初心者 ※四則演算,if文,while文程度が書ける読める段階からスタートします
- 目的
- pythonに親しむ
- シミュの雰囲気を掴む
- その他
- 質問・記載内容の誤り等があればご連絡下さい
すぐに本番のコードを読むのは大変に感じたので,pythonに慣れながらシミュレータの実装の雰囲気を掴んで欲しいとの思いで作成しました. 実際に手を動かしながら読み進めていくと効果的かと思います. 各自のスキルに合わせて適宜飛ばしながら利用して下さい.
早速鉛直投げ上げ運動の実装を試してみましょう.
初めは直線上での動きから考えていきます.
実装方法は例は以下の通りです.(鉛直上向きを正としています)
- 速度 = 速度 + (-1) * 重力加速度 * 時間刻み幅
- 高度 = 高度 + 速度 * 時間刻み幅
- 時間 = 時間 + 時間刻み幅
- もし高度が演算終了高度以上なら1.へ戻る
- 結果の出力
以下の条件で実行して滞空時間を求めてみましょう.
# 初期高度[m]:0
# 演算終了高度[m]:0
# 初速度[m/s]:100.0
# 時間刻み幅[s]:0.01
# 重力加速度[m/s^2]:9.8コードの実装例・答え(コード1行目に記載)はこちら
次は投射角を付けた運動をシミュレートしてみようと思います.
また,ここからは位置や速度の情報を行列で扱っていきます.
ライブラリでnumpyを使います.
インストールされていない人はコマンドプロンプト等でpip install numpyと入力し実行して下さい.
※エラーが出る場合は調べるか,質問して下さい.
※これからいくつかライブラリを使いますが,必要に応じて各自インストールして下さい.
numpyで行列を表現する時は以下のように書きます.
import numpy as np
matrix = np.array([data0, data1, data2])ここで,np.array([data0, data1, data2], dtype=np.float64)とすると,要素がnumpy.float64型に揃えられます.
その他,行列の扱い方についてはこちら等を参照して下さい.
以下の条件で実行して滞空時間・最高高度・水平方向の落下距離を求めてみましょう.
# 初期高度[m]:0
# 演算終了高度[m]:0
# 地面に対する投射角[deg]:70
# 初速度[m/s]:100.0
# 時間刻み幅[s]:0.01
# 重力加速度[m/s^2]:9.8※小数点以下1桁までとして正解を記載
いよいよ三次元空間での投げ上げをシミュレートしたいと思います.
今回は以下のように空間を表現します.
また,方位は北を0[deg]として,時計周りに360[deg]表記で表しています.
以下の条件で実行して滞空時間・最高高度・距離位置を求めてみましょう.
# 初期高度[m]:0
# 演算終了高度[m]:0
# 地面に対する仰角[deg]:70
# 方位角[deg]:278.5
# 初速度[m/s]:100.0
# 時間刻み幅[s]:0.01
# 重力加速度[m/s^2]:9.8