プロが教える店舗&オフィスのセキュリティ対策術

このようなレベルのコードの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件)

>matplotlibは ipywidget というのを使って


おっと筆が滑りました。matplotlib ではなくて
JupyterNotebookや JupyterLab です。申し訳ない。

JupyterNotebookや JupyterLabは科学技術計算の
ワークベンチとしてよくできているという話です。
ボタンやスライダなどで詳細な GUI を作成できます。
ちょっと癖が有るけど、使い込むと面白いです。
    • good
    • 1

これも matplotlib を使った物理アニメーションの例。


Pythonは微分方程式を扱えるライブラリが豊富だから
楽ですね。

https://qiita.com/Suzumushi724/items/ef904f4e5f6 …

また、matplotlibは ipywidget というのを使って、グラフに
ボタンやスライダを貼り付けられるので、様々なパラメータで
実験するのも簡単です。

matplotlibのシミュレーションに関してはネットで使い方を
学んだ方が早いでしょう。
    • good
    • 1

マジレスしていい?



先にも書いたけど、貴方のプログラムの書き方、って往年の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で物理シミュレーションをやる旨味じゃないかな。
「Pythonでのかんたんな物理シミュレー」の回答画像4
    • good
    • 1

物理シミュレーションなら matplotlib が楽かも


コード少な目でグラフ目盛りや座標軸付の動画作れるし、
JupyterLab からも使えます。

https://python.atelierkobato.com/animation/
    • good
    • 0

小高知宏著「Pythonによる数値計算とシミュレーション」(Amazon)

「Pythonでのかんたんな物理シミュレー」の回答画像2
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!