

このようなレベルのコードのPythonでのかんたんな物理シミュレーション(GUIシミュレーション)についての書籍は何がありますでしょうか?書籍名を教えてください。
自分で探すことができたなかで、計算物理学Ⅰとかは小生には難しすぎるので、高校生ががんばってできるレベルで良いです。
mport tkinter
import math
def move():
global x
global y
global vy
global t
global x1
global y1
canvas.delete('ball')
canvas.create_oval(x-MARGIN, (HEIGHT-y)-MARGIN, x+MARGIN, (HEIGHT-y)+MARGIN, fill='red', tags='ball')
canvas.create_oval(x1-MARGIN, (HEIGHT-y1)-MARGIN, x1+MARGIN, (HEIGHT-y1)+MARGIN, fill='gray', tags='ball')
for i in range(1, 60):
canvas.create_line(0, i * 10,800, i * 10, fill = '#000000' if i==30 else '#d2d2d2')
canvas.create_text(10, 250,text="50",font=("", 10))
for i in range(1, 80):
canvas.create_line(i * 10, 0, i * 10,600, fill = '#000000' if i==1 else '#d2d2d2')
canvas.create_text(60, 310,text="50",font=("", 10))
if 0 <= x and x <= WIDTH and 0 <= y and y <= HEIGHT:
x = x + vx0 * dt
v1 = vy
v2 = vy - g * dt
y = y + (v1+ v2) / 2.0 * dt
vy = v2
t = t + dt
else:
x = x0
y = y0
vy = vy0
t = t0
window.after(1, move)
#WIDTH, HEIGHT = 1000, 500
WIDTH, HEIGHT = 800, 600
MARGIN = 10
t0 = 0.0
dt = 0.1
g = 9.8
v0 = float(input('初速度を入力してください'))
degrees = float(input('角度を入力してください'))
theta = degrees * math.pi / 180
vx0 = v0 * math.cos(theta)
vy0 = v0 * math.sin(theta)
x0 = 10
y0 = 2 * HEIGHT / 4
x1 = 250
y1 = HEIGHT / 2
x = x0
y = y0
vy = vy0
t = t0
geo_str = str(WIDTH+MARGIN*2) + 'x' + str(HEIGHT+MARGIN*2)
window = tkinter.Tk()
window.geometry(geo_str)
window.title('moving')
canvas = tkinter.Canvas(window, width=WIDTH, height=HEIGHT, bg='white')
canvas.place(x=MARGIN, y=MARGIN)
canvas.create_oval(x-MARGIN, (HEIGHT-y)-MARGIN, x+MARGIN, (HEIGHT-y)+MARGIN, fill='red', tags='ball')
move()
window.mainloop()
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
>matplotlibは ipywidget というのを使って
おっと筆が滑りました。matplotlib ではなくて
JupyterNotebookや JupyterLab です。申し訳ない。
JupyterNotebookや JupyterLabは科学技術計算の
ワークベンチとしてよくできているという話です。
ボタンやスライダなどで詳細な GUI を作成できます。
ちょっと癖が有るけど、使い込むと面白いです。
No.5
- 回答日時:
これも matplotlib を使った物理アニメーションの例。
Pythonは微分方程式を扱えるライブラリが豊富だから
楽ですね。
https://qiita.com/Suzumushi724/items/ef904f4e5f6 …
また、matplotlibは ipywidget というのを使って、グラフに
ボタンやスライダを貼り付けられるので、様々なパラメータで
実験するのも簡単です。
matplotlibのシミュレーションに関してはネットで使い方を
学んだ方が早いでしょう。
No.4
- 回答日時:
マジレスしていい?
先にも書いたけど、貴方のプログラムの書き方、って往年のFortranのスタイルなんだよ。
逆に言うと、「Pythonでどうしてもプログラミングしなきゃいけない」必然性は、まぁ、見えないんだよね。
そしてぶっちゃけた話、Pythonは大して速くない言語だ。
と言う事は、(規模にもよるけど)物理シミュレーションのような「大量の計算が必要な」プログラムに元々向かないんだよ。
ちょっと自問して欲しい。「どうしてもPythonを使わなければならない必然性」がそこにあるのか。
それで、これはPythonに限った話じゃないんだけど、PythonのようなUNIX系プログラミング言語の場合、外部ライブラリに頼ったりすれば確かに広範囲のプログラムをこなせる。
一方、「ライブラリが多すぎて適切なライブラリを選ぶ」ってのがこれまた大変なんだよな。
例えば、貴方は「GUIシミュレーション」って言ってるけど、この「GUI」は何を表してるんだろうか。
ボタン付けたり何なり、ってのなら確かに組み込みのtkinterが(ある程度は)適してるだろう。
でも「斜方投射」のボールのアニメーションをやりたい、って程度ならそれが必ずしも適したライブラリにはならないんだ。
僕も正直言うと、最初に「なんでtkinter?」とは思ったんだよね(笑)。何か特別な思い入れがあるのか、と。
特に無いのなら、僕も #3 のtknakamuri 氏のようにmatplotlibを選ぶし、多分その辺がセオリーなんだよな。
でもここでも貴方を責めてるわけじゃない。要はPythonは必ずしもオールインワンの「プログラミング言語環境」ではないんで、下手すればVisual Basicでプログラミングするよりメンド臭い状態になる事がしばしば生じるんだよ。
で、Pythonに思い入れが特にない、とか言うのなら(っつーか貴方の現状のプログラミング「スタイル」だと明らかに合わない)、単に物理シミュレーションをやりたいだけなら意外とBASICがいいんだよね。いや、バカにしてるわけじゃなくって、オールインワンだし、資料が多いんで「物理シミュレーション"自体"を学ぶ」なら割に適した言語なんだよ。プログラミングスタイルもFortranに近いし。
要は、「Python自体を学びたい」のならPythonの学習書を、「物理シミュレーションを学びたい」のならそれ専用の本で学んだ方がいい、ってこった。
「混ぜるな危険」って事だな(笑)。
少なくとも日本で書かれたPython本はロクなブツがないし(クソでバカで読者を舐めた本ばっかり、だ)、知ってる限りで言うと「物理シミュレーションをPythonで学ぶ」と言ったような趣旨の海外の本はいまだ翻訳されてないんだ。
んで、あくまで「物理シミュレーションを学びたい」と言うのなら、知ってる範疇で言うと次の本が最高の本だ。
計算物理学入門:
https://www.amazon.co.jp/%E8%A8%88%E7%AE%97%E7%8 …
これがオススメ。非常に平易に書かれてるし、使ってる言語実装はTrueBASICだ。
って事はほぼそのまま十進BASICで動くだろう。
十進BASIC:
http://hp.vector.co.jp/authors/VA008683/
多分貴方のコーディングスタイルだとこっちの本でBASICで「物理シミュレーション」"だけ"を学んだ方がいいと思う。Pythonと同時に学ばなくてもいいよ。
余力があればPythonならPythonだけで勉強した方がいい。こっちでは「物理シミュレーション」を絡ませない方が良いと思う。
なお、十進BASICの公式サイトの掲示板では貴方のように「数値系シミュレーション」をやってる人がたくさん集まってるんで、多分同志がたくさん見つかるんじゃないかな、って思う。
その辺もBASICで物理シミュレーションをやる旨味じゃないかな。

No.3
- 回答日時:
物理シミュレーションなら matplotlib が楽かも
コード少な目でグラフ目盛りや座標軸付の動画作れるし、
JupyterLab からも使えます。
https://python.atelierkobato.com/animation/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- その他(プログラミング・Web制作) 物理の斜方投射の目盛り線とx軸、y軸の追加について 3 2023/05/26 21:11
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) 物理の斜方投射のシミュレーションにおける位置や速度の単位について 4 2023/05/31 09:50
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#のループでtextboxに値を入れ...
-
textboxとlabelのコピー
-
テキストボックスを下から上へ...
-
VBA public変数はどのようなこ...
-
アクセスできない保護レベルエ...
-
【VB.NET】テキストボックスに...
-
エクセルVBAでテキストボッ...
-
他のフォームから別のフォーム...
-
ExcelVBAで他のファイル(proje...
-
コンボボックスのClickイベント
-
VB.NETでのイベントの途中終了
-
共有フォルダの「共有のアクセ...
-
チェックボックスを操作できな...
-
VB.NET コンボボックスからのit...
-
VB2010 TextBoxの数字の表示...
-
レコードセットにnullの場合
-
comboboxのクリックイベントに...
-
VBでの入力値制限について
-
プロシージャまたは関数の引数...
-
C#を勉強していて、指定したフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#のループでtextboxに値を入れ...
-
String型の値にスラッシュをつ...
-
vb.net 文字コードから漢字へ変換
-
textboxとlabelのコピー
-
datagridview の任意の行に三...
-
Pythonでのかんたんな物理シミ...
-
テキストボックスを下から上へ...
-
VBA テキストボックスで計算
-
[vb.net] 起動したFrom2を閉じ...
-
入力された値の動的取得方法に...
-
C# RichTextBoxについて
-
C# コントロール取得
-
VBA public変数はどのようなこ...
-
他のフォームから別のフォーム...
-
エクセルVBAでテキストボッ...
-
VB.NETでのイベントの途中終了
-
チェックボックスを操作できな...
-
【VB.NET】テキストボックスに...
-
レコードセットにnullの場合
-
アクセスできない保護レベルエ...
おすすめ情報