Hallo, kann mir jemand bitte beim Erstellen ein Struktogramm für dieses Python-Programm helfen?Danke.
Der Programmcode:
from MaterialWS22 import Klickpunkte
import matplotlib.pyplot as plt
import numpy as np
Einleitungstext
print('Willkommen zu diesem Programm zur Analyse von Höhendaten!\n'+ 'Sie werden aufgefordert, zwei Punkte auf dem Bild auszuwählen,\n'+ 'indem Sie mit der Maus darauf klicken.')
Bedienungstext
print('Das Programm berechnet die projizierten Datenpunkte und\n'+ 'den Durchschnitt der Höhenangaben für jedes x- und y-Koordinaten.\n'+ 'Am Ende wird ein Diagramm erstellt und angezeigt.')
Lese Höhendaten aus Textdatei ein und speichere sie in Variablen
data = np.genfromtxt('BO_Querenburg.txt', delimiter=',', unpack=True)
Speichere x-, y- und h-Werte der Daten in eigenen Variablen
x, y, h = data
Lese Punkte P1 und P2 aus Bilddatei ein
P1, P2 = Klickpunkte('BO_Querenburg.jpg')
Speichere Koordinaten von P1 und P2 in eigenen Variablen
(x1, y1) = P1 (x2, y2) = P2
Gebe Koordinaten von P1 und P2 aus
print('Gewählt: P1 =' , P1, 'und P2 =', P2)
Berechne Steigung der Linie zwischen P1 und P2
steigung = (y2 - y1) / (x2 - x1)
Gebe Steigung der Linie aus
print(f'Die Steigung beträgt: {steigung}')
Berechne Länge der Linie mit dem Satz des Pythagoras
d = np.sqrt((y2-y1)2 + (x2-x1)2)
Gebe Länge der Linie aus
print(f'Länge der Schnitlinie: {d:.2f} m ')
Wähle Datenpunkte aus, deren x-Werte im x-Wertebereich von P1 und P2 liegen
if x2 > x1: x = x[x >= x1] x = x[x <= x2] else: x = x[x <= x1] x = x[x >= x2]
Entferne doppelte Einträge aus ausgewählten x-Werten
x = np.unique(x)
Wähle Datenpunkte aus, deren y-Werte im y-Wertebereich von P1 und P2 liegen
if y2 > y1: y = y[y >= y1] y = y[y <= y2] else: y = y[y <= y1] y = y[y >= y2]
Entferne doppelte Einträge aus ausgewählten y-Werten
y = np.unique(y)
Berechne y-Position der Punkte auf der Linie zwischen P1 und P2
b = y1 - steigung * x1 x = (y - b) / steigung
Runde x, y-Werte der projizierten Datenpunkte auf ganze Zahlen
x = x.round() y = y.round()
Wende Reihenfolge der x- und y-Werte um, falls Steigung der Linie negativ ist
if steigung < 0: x = np.flip(x) y = np.flip(y)
Leere Liste erstellen
h = []
Lösche alle ungeraden Elemente aus x und y
x = np.delete(x, slice(1, x.shape[0], 2)) y = np.delete(y, slice(1, y.shape[0], 2))
Iteriere über jedes Tupel t in data.T
j = 0
Solange die Länge von h ungleich der Anzahl der Elemente in y ist:
while len(h) != np.size(y): # Gehe jedes Element in der transponierten Datenmatrix durch: for t in data.T:
Wenn x- und y-Werte von t den x- und y-Werten der projizierten Datenpunkte
entsprechen, speichere Höhenwert von t in h
if t[0] == x[j] and t[1] == y[j]:
h.append(t[2])
j+=1
# Beende Schleife, falls alle projizierten Datenpunkte verarbeitet sind
if len(h) == np.size(y):
break
Erstelle Array mit gleichmäßigen Abständen zwischen den Punkten
dd = np.linspace(0, d , np.size(h))
Erstelle Figuren- und Axes-Objekte für Plot
fig = plt.subplots(figsize=(8, 4))
Zeichne Liniendiagramm von h in y-Achse gegen dd in x-Achse
plt.plot(dd, h, color='red')
Fülle Fläche unter Kurve in Plot mit gelbe Farbe
plt.fill_between(dd,h, color='yellow', alpha=0.4)
Setze den y-Achsenbereich auf 0 bis 175
plt.ylim(0, 175)
Setze y-Achsenbeschriftung auf 'Höhe über NHN[m]'
plt.ylabel('Höhe über NHN [m]')
Setze x-Achsenbeschriftung auf 'Abstand zu P1[m]'
plt.xlabel('Abstand zu P1 [m]')
Setze Titel des Plots auf 'Höhenprofil zwischen P1 und P2'
plt.title('Höhenprofil zwischen P1 und P2')
Zeichne Gitterlinien im Diagramm
plt.grid()
Speichere Diagramm als PNG-Datei
plt.savefig('Diagramm.png')
Zeige Diagramm an
plt.show()
Punkte: 10
Markdown wird unterstützt.