Geradenschnitt

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.

Ich bastele gerade an einem Tool um verschiedenste (vermessungstechnische) Schnitt-Varianten berechnen zu lassen - als erstes den so genannten Geradenschnitt.
In einem ersten Schritt will ich ein paar Komfort-Funktionen einbauen (ich weis: in dem Stadium des Projekts viel zu früh).
Aber das ganze soll später noch viel weiter gehen: es sollen später noch ein paar Spezialfälle und Randbedingungen abgefangen werden und dann auch noch analytische UND nummerische abgeleitet werden.

Für einen mini-ersten Schritt:
Was hier bei der Funktion set_deviation passieren soll:
In Version 1 soll die Funktion zwei Parameter bekommen: dimension und value. Es sollen dann alle Einträge von points[] nach dimension durchsucht werden und der Wert auf value gesetzt werden.
In einem ersten Versuch war der Plan mir mal die Werte von 'Sx' ausgeben zu lassen und zu prüfen, ob ich Werte überhaupt ansprechen und später dann auch überschreiben kann, aber selbst das klappt nicht. Könnt ihr mir mal bitte sagen, warum nicht?


Hier Stand der Dinge:

Code: Alles auswählen

# math. bibs
import math
from sympy import *
import numpy as np
# other bibs
from pprint import pprint

# raw data
points = [
    {},
    {'name': '1097', 'x': 883.671, 'y': 384.496, 'z': None, 'Sx': None, 'Sy': None, 'Sz': None},
    {'name': '13', 'x': 833.852, 'y': 388.750, 'z': None, 'Sx': None, 'Sy': None, 'Sz': None},
    {'name': '4', 'x': 839.347, 'y': 408.780, 'z': None, 'Sx': None, 'Sy': None, 'Sz': None},
    {'name': '3', 'x': 877.157, 'y': 376.062, 'z': None, 'Sx': None, 'Sy': None, 'Sz': None}
]


def set_deviation():
    for point in points:
        print(point['Sx'])


set_deviation()
# pprint(points)


m1 = (points[2]['y'] - points[1]['y']) / (points[2]['x'] - points[1]['x'])
m2 = (points[4]['y'] - points[3]['y']) / (points[4]['x'] - points[3]['x'])
# print(m1)
# print(m2)

xs = (points[3]['y'] - points[1]['y'] + m1 * points[1]['x'] - m2 * points[3]['x']) / (m1 - m2)
ys = points[1]['y'] + m1 * (xs - points[1]['x'])
print(xs)
print(ys)
Feedback1000
User
Beiträge: 88
Registriert: Dienstag 20. September 2022, 21:21

Habe gerade selbst eine Lösung mit einigen "Probier"-Aufwand gefunden:

Code: Alles auswählen

def set_deviation(dimension, value):
    if dimension in ['Sx', 'Sy', 'Sz']:
        for point in points:
            point[dimension] = value
    else:
        print('Invalid dimension. Only "Sx", "Sy", "Sz" are allowed.')
Danke euch trotzdem.
VG
Benutzeravatar
__blackjack__
User
Beiträge: 14065
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Feedback1000: Also im ersten Beitrag verschweigst Du die Ausnahme die da offensichtlich ausgelöst wird.

Funktionen bekommen alles was sie ausser Konstanten benötigen als Argument(e) übergeben. `set_deviation()` greift aber einfach so auf `points` zu. Das sollte auf Modulebene nicht existieren, dann können solche Fehler auch nicht passieren.

Die Ausgabe im Fehlerfall ist nicht sinnvoll. Das sollte eine Ausnahme sein, damit der Aufrufer auch darauf reagieren kann, falls etwas falsches übergeben wird.

Wörterbücher die immer den gleichen Satz an Schlüsseln haben sind eigentlich Objekte und dafür würde man eine Klasse schreiben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten