Пример #1
0
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)
                               )
Пример #2
0
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)
Пример #3
0
def mittelpunkt_und_radius(a, b):
    mp = mittelpunkt(a, b)
    radius = l2metrik(mp, a)
    return mp, radius
Пример #4
0
def punkt_im_radius(mp, radius, punkt):
    if l2metrik(mp, punkt) <= radius:
        return True
    else:
        return False
Пример #5
0
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)