Wenn Sie ein Diagramm aus einer Funktion zeichnen, möchten Sie möglicherweise sehen, wie das Diagramm aussieht, während Sie die Parameter ändern. Beispielsweise kann der Vergleich zwischen der analytischen Lösung und der numerischen Lösung der Ballkoordinaten, wenn der Ball im folgenden Dokument vertikal geworfen wird, beim Ändern der Parameter bestätigt werden.
Mit Python erlernte numerische Berechnungsmethode für die Fluiddynamik
Hier wird der Graph bei v0 = 10, 30, 100 gezeichnet.
Zeitbreite: Δt, Anfangsgeschwindigkeit: v0, Anfangshöhe: h0, Schwerkraftbeschleunigung: g kann mit dem Schieberegler geändert werden. Nachdem Sie die Variable mit dem Schieberegler geändert haben, zeichnen Sie das Diagramm mit der Schaltfläche Senden und löschen Sie das Diagramm mit der Schaltfläche Löschen.
import numpy as np
from matplotlib import pyplot as plt
import PySimpleGUI as sg
layout = [
[
sg.Text(
'delta t',
size=(13, 1)
),
sg.Slider(
(0.01, 1),
0.1,
0.01,
orientation='h',
size=(15, 15),
key='-DELTA T-',
enable_events=True
)
],
[
sg.Text(
'v0',
size=(13, 1)
),
sg.Slider(
(0.01, 100),
10,
0.1,
orientation='h',
size=(15, 15),
key='-V0-',
enable_events=True
)
],
[
sg.Text(
'h0',
size=(13, 1)
),
sg.Slider(
(0, 100),
0,
1,
orientation='h',
size=(15, 15),
key='-H0-',
enable_events=True
)
],
[
sg.Text(
'gravity',
size=(13, 1)
),
sg.Slider(
(0.1, 100),
9.8,
0.1,
orientation='h',
size=(15, 15),
key='-G-',
enable_events=True
)
],
[
sg.Button(
'Submit',
size=(10, 1)
),
sg.Button(
'Clear',
size=(10, 1)
)
]
]
window = sg.Window('Trajectory of ball', layout, location=(0, 0))
Zeigen Sie das Diagramm mit matplotlib an. Drehen Sie die Hauptschleife, nachdem Sie den Diagrammbereich mit plt.figure und fig.add_subplot () erstellt haben. Ich überwache GUI-Ereignisse und wenn ich die Senden-Taste drücke, lese ich den Wert vom Schieberegler und zeige das Diagramm an. Bei Verwendung von plt.pause () wird außerdem ein aktualisierbares Diagramm angezeigt.
fig = plt.figure(figsize=(7, 7), dpi=100)
ax = fig.add_subplot(111)
while True:
event, values = window.read(timeout=0)
if event == "__TIMEOUT__":
continue
#Beenden, wenn die Schaltfläche Beenden gedrückt wird oder wenn die Schaltfläche zum Schließen des Fensters gedrückt wird
elif event in ('Exit', sg.WIN_CLOSED, None):
break
elif event == 'Submit':
dt = values['-DELTA T-']
v0 = values['-V0-']
g = values['-G-']
h0 = values['-H0-']
t1 = ((v0 ** 2 + 2 * g * h0) ** 0.5 + v0) / g
t = np.linspace(0, t1, 100)
h = -0.5 * g * t ** 2 + v0 * t + h0
la, = plt.plot(t, h, color='blue')
# ##########################################################
t = 0
h = h0
# h =Wechseln Sie zu Darstellung bis 0
while h >= 0:
ln = plt.scatter(t, h, marker='o', c='black')
h += (-g * t + v0) * dt
t += dt
#Darstellung des Graphen
ax.set_xlabel('Time')
ax.set_ylabel('Height')
ax.grid(color='black', linestyle='dashed', linewidth=0.5)
ax.legend(handles=[la, ln], labels=['Analytical', 'Numerical'])
plt.pause(0.1)
# ##########################################################
elif event == 'Clear':
plt.clf()
ax = fig.add_subplot(111)
plt.pause(0.1)
Recommended Posts