Funktion zur Berechnung der minimalen und maximalen Distanz einer Probandenfahrspur zu einer Straße

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
morgig
User
Beiträge: 1
Registriert: Montag 16. September 2024, 09:13

Hallo alle zusammen,

ich bin gerade dabei eine Bachelorarbeit zu schreiben und dort brauche ich einen Python Code, der Diagramme erstellt, zur Auswertung von Daten. Mein Skript ist schon beinahe fertig, jedoch will ich noch eine Funktion implementieren, die den Punkt einer Fahrspur eines Probanden ausgibt, der minimale bzw. maximale Distanz von der Fahrspur eines Probanden bis hin zum linken Straßenrand ausgibt. Ich habe die Funktion bisher wie folgt implementiert:

def calculate_extremum(x_proband, y_proband, x_left_border, y_left_border, spurBreite):

# Resette die Indizes
max_distance_point = (None, None, None)
min_distance_point = (None, None, None)
x_proband = x_proband.reset_index(drop=True)
y_proband = y_proband.reset_index(drop=True)
x_left_border = x_left_border.reset_index(drop=True)
y_left_border = y_left_border.reset_index(drop=True)

# Berechne die euklidische Distanz zwischen Proband und linkem Straßenrand
distances = np.sqrt((x_proband - x_left_border)**2 + (y_proband - y_left_border)**2)
#distances_ideallinie = np.sqrt((x_proband - x_left_border)**2 + (y_proband - (y_left_border - spurBreite - 1/2*spurBreite))**2)
distances_ideallinie = y_proband - (y_left_border - spurBreite - 1/2*spurBreite)

# Berechne den Punkt mit der geringsten Distanz
min_distance_index = np.argmin(distances)
min_distance_point = (x_proband[min_distance_index], y_proband[min_distance_index], distances_ideallinie[min_distance_index])

# Finde die Punkte, wo der Probandengraph über dem linken Straßenrand liegt
over_left_border_mask = y_proband > y_left_border

if np.any(over_left_border_mask):
# Berechne die maximale Distanz nur für den Abschnitt über dem linken Straßenrand
over_left_distances = distances[over_left_border_mask]
over_left_distances_ideallinie = distances_ideallinie[over_left_border_mask]
over_left_x_proband = x_proband[over_left_border_mask]
over_left_y_proband = y_proband[over_left_border_mask]

max_distance_index = np.argmax(over_left_distances)
max_distance_point = (over_left_x_proband.iloc[max_distance_index], over_left_y_proband.iloc[max_distance_index], over_left_distances_ideallinie.iloc[max_distance_index])

# Finde die Punkte, die am nächsten an der rechten Straßenseite sind
max_all_distance_index = np.argmax(distances)
max_all_distance_point = (x_proband[max_all_distance_index], y_proband[max_all_distance_index], distances_ideallinie[max_all_distance_index])

if max_distance_point != (None, None, None):
return max_distance_point, max_all_distance_point
else:
return min_distance_point, max_all_distance_point

Leider ist dort das Problem, dass immer wieder die Distanz zwischen dem Punkt auf dem linken Straßenrand und dem Punkt auf der Probandenfahrspur senkrecht zur x Achse gemessen wird und nicht wie gewünscht die Krümmung der Straße miteinbezieht, denn es soll die Distanz aus der Sicht des Autofahrers berechnet werden, also wie viele Meter der linke Straßenrand noch entfernt ist.
x_proband und y_proband sind die x und y Koordinaten der Probandenfahrspur und x_leftBorder und y_leftBorder sind die x und y Koordinaten des linken Straßenrandes.
Wäre super, wenn mir dabei jemand helfen könnte die Funktion dementsprechend anzupassen, danke fürs Zeitnehmen schon mal.

Viele Grüße
Moritz
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

Ohjee, das fehlt noch einiges an "I" in der KI-Antwort.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
noisefloor
User
Beiträge: 4173
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

man muss der KI aber zugute halten, dass sie scheinbar gecheckt hat, dass "blackjack" im Benutzernamen der Reputation in Sachen Kompetenz zugute kommen könnte... ;-)

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1222
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich bin dafür, dass KI-generierte Inhalte von einer KI automatisch beantwortet werden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

@noisefloor der Benutzername ist mir tatsächlich als erstes ins Auge gefallen und hatte da schon ein komisches Gefühl. Dann will ich in diesem Bereich das "I" nicht bemängeln. Wir sind ja auch nicht in allen Bereichen gleich schlau. 🤪


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
losgehts
User
Beiträge: 20
Registriert: Montag 8. Juni 2009, 01:00

Hallo,

ich vermute da zwei Probleme:
1) wenn ich den Code richtig lese, dann berechnest du für einen Punkt der Probandenfahrspur nur eine Distanz. Du weißt ja aber im Vorhinein nicht, zu welchem Punkt des Fahrbahnrandes der Minimale Abstand (=Distanz) eines Punktes der Probandenfahrspur besteht.

2) Wenn du - wie du schreibst - "es soll die Distanz aus der Sicht des Autofahrers berechnet werden" Distanzen ermitteln möchtest, dann entspricht das sozusagen der Aufgabe "berechne für jeden Punkt des Fahrbahnrandes den Abstand zur aktuellen Sichtlinie des Autofahrers und finde das Minimum dieser Abstände. Das ist dann der Abstand zu einem bestimmten Punkt der Probandenfahrspur. Um für jeden Punkt der Probandenfahrspur diesen Abstand zu haben, muss das eben für jeden Punkt der Probandenfahrspur wiederholt werden.
Die Berechnung des Abstandes ist also der Abstand eines Punktes zu einer Geraden (nicht Punkt zu Punkt).

Es erscheint so, als ob du zu früh anfängst zu programmieren: ich empfehle dir, zu Papier und Stift zurück zu kehren: mach dir eine Skizze mit den Polygonen (Fahrspuren, Probandenlinie, etc.) und zeichne die Distanzen ein, die du für einen Punkt der Probandenfahrspur ermitteln möchtest. Tipp: nimm dafür nicht den ersten Punkt und auch nicht den letzten Punkt der Probandenfahrspur.

Grüße, Ulrich
Antworten