0

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()

Diese Frage melden
gefragt

Punkte: 10

 
Kommentar schreiben
0 Antworten