def metriken_results(): if request.method == "POST": l1 = [] l2 = [] for i in range(session["metriken_2_points_dimensions"]): try: l1.append(float(request.form.get(f"a1{i}"))) except ValueError: return render_template("metriken_error.html", message=f"Fehler in Spalte 1, Zeile {i + 1}!") except TypeError: return render_template("metriken_error.html", message=f"Fehler in Spalte 1, Zeile {i + 1}!") try: l2.append(float(request.form.get(f"a2{i}"))) except ValueError: return render_template("metriken_error.html", message=f"Fehler in Spalte 2, Zeile {i + 1}!") except TypeError: return render_template("metriken_error.html", message=f"Fehler in Spalte 2, Zeile {i + 1}!") p1 = np.array(l1) p2 = np.array(l2) return render_template("metriken_results.html", l22metrik=round(l22metrik(p1, p2), 4), l2metrik=round(l2metrik(p1, p2), 4), l1metrik=round(l1metrik(p1, p2), 4), l8metrik=round(l8metrik(p1, p2), 4) )
def metriken_multi_points_input(): points = [] two = [] rows = [] for i in range(session["metriken_amount_2d_points"]): try: x = float(request.form.get(f"x{i + 1}")) y = float(request.form.get(f"y{i + 1}")) print(f"x = {x}, y = {y}") points.append(np.array([x, y])) except ValueError: return render_template("metriken_multi_error.html", message="Du musst für alle Punkte Werte eigeben.\n" "Verwende Punkte statt Kommas! - ValueError") except TypeError: return render_template("metriken_multi_error.html", message="Du musst für alle Punkte Werte eigeben.\n" "Verwende Punkte statt Kommas! - TypeError") two = [i for i in combinations(points, 2)] for combi in two: row = [] row.append(np.asarray(combi)) p1 = combi[0] p2 = combi[1] l1 = round(l1metrik(p1, p2), 4) l2 = round(l2metrik(p1, p2), 4) l22 = round(l22metrik(p1, p2), 4) l8 = round(l8metrik(p1, p2), 4) print(f"l1 {l1}, l2 {l2}, l22 {l22}, l8 {l8}") row.append(l1) row.append(l2) row.append(l22) row.append(l8) rows.append(row) return render_template("metriken_multi_results.html", rows=rows)
def mittelpunkt_und_radius(a, b): mp = mittelpunkt(a, b) radius = l2metrik(mp, a) return mp, radius
def punkt_im_radius(mp, radius, punkt): if l2metrik(mp, punkt) <= radius: return True else: return False
def mp_und_radius_input(): from ScmTest3 import mittelpunkt_und_radius, mittelsenkrechte, mittelpunkt, schnittpunkt_ms, \ punkt_im_radius, mp_und_radius_drei_auf_gleicher_achse from itertools import combinations if request.method == "POST": points = [] two: tuple = [] three: tuple = [] rows = [] minimal_überdeckender_kreis = [] for i in range(session["m_u_r_amount_of_points"]): try: x = float(request.form.get(f"x{i + 1}")) y = float(request.form.get(f"y{i + 1}")) print(f"x = {x}, y = {y}") points.append(np.array([x, y])) except ValueError: return render_template("mp_und_radius_error.html", message="Du musst für alle Punkte Werte eigeben.\n" "Verwende Punkte statt Kommas! - ValueError") except TypeError: return render_template("mp_und_radius_error.html", message="Du musst für alle Punkte Werte eigeben.\n" "Verwende Punkte statt Kommas! - TypeError") two = [i for i in combinations(points, 2)] print(f"Zweierkombinationen = {two}") three = [i for i in combinations(points, 3)] print(f"Dreierkombis = {three}") # if there are less than 3 given points the three array stays empty column_names = [point for point in points] column_names.insert(0, "Radius") column_names.insert(0, "Mittelpunkt") column_names.insert(0, "Punkte") rows.append(column_names) for combi in two: # erzeugt für jede zweier Kombination einen Kreis dazwischen und überprüft, welche Punkte darin liegen row = [np.asarray(combi)] mp, radius = mittelpunkt_und_radius(combi[0], combi[1]) row.append(np.round(mp, 4)) row.append(round(radius, 4)) for point in points: row.append(punkt_im_radius(mp, radius, point)) rows.append(row) for combi in three: # erstellt für jede 3er Kombination einen MÜK und checkt, welche Punkte drin liegen row = [np.asarray(combi)] mp = 0 radius = 0 a, b, c = combi[0], combi[1], combi[2] mi1 = bi1 = mi2 = bi2 = x = y = None # ------------ try: # Testen ob es eine Mittelsenkrecht gibt, oder ob beide Werte auf gleicher Höhe liegen mi1, bi1 = mittelsenkrechte(a, b) mi2, bi2 = mittelsenkrechte(a, c) except ValueError: print("2 Punkte auf gleicher Höhe") try: mi1, bi1 = mittelsenkrechte(a, c) mi2, bi2 = mittelsenkrechte(b, c) except ValueError: try: mi1, bi1 = mittelsenkrechte(a, b) mi2, bi2 = mittelsenkrechte(b, c) except ValueError: print("Alle 3 Punkte liegen auf der gleichen Achse") mp, radius = mp_und_radius_drei_auf_gleicher_achse(a, b, c) try: # Testen ob es einen Schnittpunkt gibt if radius == 0: print(f"{mi1} -- {bi1} -- {mi2} -- {bi2}") x, y = schnittpunkt_ms(mi1, bi1, mi2, bi2) mp = np.array([x, y]) radius = l2metrik(mp, a) except ValueError: # Es gibt keinen Schnittpunkt der Achsen -> die Punkte liegen alle auf einer Achse mp, radius = mp_und_radius_drei_auf_gleicher_achse(a, b, c) row.append(np.round(mp, 4)) row.append(round(radius, 4)) for point in points: row.append(punkt_im_radius(mp, radius, point)) rows.append(row) for ind, row in enumerate(rows): # Check mal ab, was da so rauskommt # print(f"ROWS : {row}") try: print(row) if all(row[3:]): minimal_überdeckender_kreis.append(ind) print(f"MÜK bei index: {minimal_überdeckender_kreis}") except ValueError: # print("ValueError bei Checken der Ergebnisse") pass return render_template("mp_und_radius_results.html", rows=rows, muek=minimal_überdeckender_kreis)