Rückwärtsschnitt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Feedback1000
User
Beiträge: 88
Registriert: Dienstag 20. September 2022, 21:21

Hallo Ihr Mathe-Brains.

Ich versuche gerade einen sogenannten Rückwertsschnitt zu programmieren, aber bevor ich in die Berechnung der Standartabweichung komme, muss mein fuunktionales Modell stehen. Das tut es aber nicht.

Ich vermute, dass ich irgendwo bei den Winkeln und der Umrechnung von gon rad, oder Ähnlichem einen Fehler gemacht habe. Aber ob genau das die Richtige Spur ist, oder ich einen anderen Bock eingebaut habe, kann ich nach 5 Stunden verzweiflung nicht mehr feststellen.

Es wäre cool, wenn sich der Sache mal jemand von euch annehmen könnte und mir den entscheidenden Hinweis geben könnte.

Riesen DANK schon einmal im Vorhinein.

Code: Alles auswählen

import sympy as sp
from pprint import pprint

################# HINWEISE #################
# momentan wird nur 2D berechnet
# A, M, B müssen genau in dieser Reihenfolge eingetragen werden -> siehe r
# r von A muss 0 (Null) sein - also u.U. vorher alle r reduzieren!


measurementlist = [
    # Format: name, E, N, Z, sE, sN, sZ, r, sr
    {'name': 'A', 'y': 47434.640, 'x': 90377.340, 'z': None, 'sy': 0, 'sx': 0, 'sz': None, 'r': 0.000, 'sr': 0.001},
    {'name': 'M', 'y': 47016.600, 'x': 90219.700, 'z': None, 'sy': 0, 'sx': 0, 'sz': None, 'r': 22.925, 'sr': 0.001},
    {'name': 'B', 'y': 47493.190, 'x': 89885.980, 'z': None, 'sy': 0, 'sx': 0, 'sz': None, 'r': 36.253, 'sr': 0.001},
]
# pprint(default_values, sort_dicts=False)

# Test:
for default_value in measurementlist:
    print(f"r von {default_value['name']}: {default_value['r']} gon\tbzw. {default_value['r'] * sp.N(sp.pi) / 200} rad")
print()


def calculate(measurements):
    ya, xa, ym, xm, yb, xb, ra, rm, rb = all_symbols = sp.symbols('yA xA yM xM yB xB rA rM rB')

    sub = {
        ya: measurements[0]['y'], xa: measurements[0]['x'], ra: measurements[0]['r'] * sp.N(sp.pi) / 200,
        ym: measurements[1]['y'], xm: measurements[1]['x'], rm: measurements[1]['r'] * sp.N(sp.pi) / 200,
        yb: measurements[2]['y'], xb: measurements[2]['x'], rb: measurements[2]['r'] * sp.N(sp.pi) / 200,
    }

    deviations = [
        measurements[0]['sx'], measurements[0]['sy'], measurements[0]['sr'],
        measurements[1]['sx'], measurements[1]['sy'], measurements[1]['sr'],
        measurements[2]['sx'], measurements[2]['sy'], measurements[2]['sr'],
    ]

    alpha = ra - rm
    beta = rb - rm
    print(f'alpha: {alpha.subs(sub) * 200 / sp.N(sp.pi)} gon bzw. {alpha.subs(sub)} rad')
    print(f'beta: {beta.subs(sub) * 200 / sp.N(sp.pi)} gon bzw. {beta.subs(sub)} rad')
    print()

    x_a = xa - xm
    y_a = ya - ym
    x_b = xb - xm
    y_b = yb - ym
    print(f'x_a: {x_a.subs(sub)}')
    print(f'y_a: {y_a.subs(sub)}')
    print(f'x_b: {x_b.subs(sub)}')
    print(f'y_b: {y_b.subs(sub)}')
    print()

    azimuth_nm = sp.atan((y_a * sp.cot(alpha) - y_b * sp.cot(beta) + (x_b - x_a)) / (
            y_a * sp.cot(alpha) - y_b * sp.cot(beta) - (x_b - x_a)))
    azimuth_mn = azimuth_nm - sp.N(sp.pi)
    # print(azimuth_nm)
    print(f'azimuth_nm: {azimuth_nm.subs(sub) * 200 / sp.N(sp.pi)} gon bzw. {azimuth_nm.subs(sub)} rad')
    # print(azimuth_mn)
    print(f'azimuth_mn: {azimuth_mn.subs(sub) * 200 / sp.N(sp.pi)} gon bzw. {azimuth_mn.subs(sub)} rad')
    print()

    x_n = ((y_b + x_b * sp.cot(beta)) * sp.tan(azimuth_mn) + (x_b - y_b * sp.cot(beta))) / (1 + sp.tan(azimuth_mn) ** 2)
    y_n = x_n * sp.tan(azimuth_mn)
    # print(x_n)
    print(f'x_n: {x_n.subs(sub)}')
    # print(y_n)
    print(f'y_n: {y_n.subs(sub)}')
    print()

    xn = x_n + xm
    yn = y_n + ym
    # print(xn)
    print(f'xn: {xn.subs(sub)}')
    # print(yn)
    print(f'yn: {yn.subs(sub)}')
    print()


def main():
    calculate(measurementlist)


if __name__ == '__main__':
    main()
PS: die ganzen print()-Befehle sind jetzt nur für die Zeit der "Entwicklung" relevant und werden für eine bessere Lesbarkeit natürlich noch entfernt...
Antworten