![]() |
---|
Hallo Leute. Ich versuche für ein Projekt Sensordaten zu simulieren. Ich messe mit einem Lidar Sensor den Abstand von einem Punkt zum Rand einer Rennstrecke in 0.9° Schritten. Für die Simulation möchte ich die Rennstrecke als Reihe von Koordinatenpunkten importieren (zum anfangen mal einfach einen Streckenrand). Jetzt möchte ich von einem gegebenen Punkt in einem gegebenen Winkel von diesem Punkt den Abstand zum Streckenrand bestimmen. Der Streckenrand kann zunächst einfach eine Lineare interpolation. Zw. den Stützpunkten sein - sollte in folge aber ein geschlossener Spline werden. Ich suche nach einer möglichst allgemeinen Lösung weil das ganze in ein Programm implementiert werden soll. Jetzt meine Frage: gibt es dafür eine einfache lösung ohne sich für jeden winkel die passenden stützpunkte zu suchen und dann ein Polynom durchzulegen? Weil das suchen der Stützpunkte rel. aufwendig wird. Lg Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
Hierzu passend bei OnlineMathe: Schnittpunkte bestimmen Online-Übungen (Übungsaufgaben) bei unterricht.de: Ebene Geometrie - Einführung Geraden im Raum Grundbegriffe der ebenen Geometrie Lagebeziehung Gerade - Ebene (in Normalenform) Lagebeziehung Gerade - Ebene (in Parameterform) Lineare Gleichungssysteme Ebene Geometrie - Einführung Geraden im Raum Grundbegriffe der ebenen Geometrie Lagebeziehung Gerade - Ebene (in Normalenform) Lagebeziehung Gerade - Ebene (in Parameterform) |
![]() |
![]() |
Unklar, was genau du machen möchtest. In welchem Koordinatensystem möchtest du dich letztendlich bewegen? Du hast die Koordinaten der Stützpunkte ja durch deine Messung ja schon direkt in Polarkoordinaten gegeben, wenn du deinen Standpunkt als Zentrum wählst. Eine lineare Interpolation von Winkel und Abstand sollte deine Stützpunkte dann jeweils paarweise durch eine archimedische Spirale verbinden. Und wenns kartesische Koordinaten sein sollen - warum schreibst du, dass das Berechnen der Stützpunkt so aufwändig ist? DU benötigst doch nur die gemessene Entfernung, den Winkel bzw. dessen Sinus- und Kosinuswert. Warum sollen es unbedingt Splines sein und was möchtest du denn mit der digitalisierten Strecke überhaupt machen? |
![]() |
Sorry, das ist vllt. falsch rüber gekommen. Ich möchte die Strecke nicht aus den Messpunkten nachbilden. Ich möchte eine beliebige Strecke importieren Form einer Reihe von Koordinatenpunkten). Dann möchte ich das virtuelle "Auto" an einem beliebigen Punkt auf der Strecke platzieren und daraus berechnen welche Daten mein Sensor liefern würde - würde er auf der echten Strecke stehen. Es geht mir um die Simulation dieser Sensordaten um mein Projekt vorher testen zu können bevor ich mir einen sehr teuren Lidar Sensor anschaffe. Ich möchte daher zunächst in einem globalen Koordinatensystem bleiben. Die Umrechnung auf das Koordinatensystem des Fahrzeugs ist dann kein Problem. Der Lidar Sensor würde mir alle 0.9° einen Abstand zur Wand liefern. Das heist ich möchte abhängig von einem Winkel den Abstand zw. Punkt und Spline ermitteln. Das Problem dabei ist das die gedachte Gerade nie genau einen meiner Stützpunkte treffen wird. Das bedeutet ich müsste zuerst die beiden Stützpunkte finden die links und rechts von der Gerade liegen (was sich ja mit einer minimierung des Projektionsabstands machen lassen würde), was mit steigender Anzahl an Stützpunkte immer aufwendiger wird. Daher wollte ich fragen ob es eine andere, einfachere Möglichkeit gibt. lG |
![]() |
OK, das klingt ja jetzt ganz anders. Die importierte Strecke liegt also in kartesischen Koordinaten vor. Ich denke, wenn die Anzahl der Datenpunkte groß genug, bzw. der Streckenverlauf nicht "bösartig" ist, sollte vielleicht lineare Interpolation ausreichend sein, oder? Dann "reduziert" sich der Aufwand darauf, mal zwei Geraden zu schneiden. oder? |
![]() |
Ja genau - das Problem ist wie finde ich die richtige Gerade zum schneiden? Also genau die zwei Punkte zwischen denen die Gerade liegt? |
![]() |
wie finde ich die richtige Gerade zum schneiden? naja, deine Scangerade mit ALLEN Strecken schneiden und dann die nehmen, bei der der Schnittpunkt innerhalb der Strecke ist und wenns mehrere gibt, dem Sensor am nächsten liegt Eine Alternative, die mir gerade einfällt und von der man erst mal prüfen müsste, ob der Aufwand dabei wirklich geringer ist, wäre folgende: Mittels der HNF der Scangeraden kannst du von jedem Punkt den orientierten Abstand von der Gerade ermitteln - uns interessiert nur dessen Vorzeichen. Fang also beim ersten Punkt deiner Rennstrecke an und ermittle für jeden Folgepunkt das Vorzeichen des Abstands von der Scangeraden. Sobald dieses Vorzeichen wechselt hast du eine Strecke gefunden, die die Scangerade schneidet. Diese Abstandsrechnerei aber auch das Schneiden zweier Geraden lässt sich sicher programmiertechnisch relativ einfach und effizient realisieren. Das Schneiden der Scangeraden mit den einzelnen Kubiken einer Spline-interpolation ist da sicher deutlich aufwändiger und rechenintensiver. Soll dein Programm in einen implementiert werden? |
![]() |
Danke für deine Antwort - der erste Ansatz klingt interessant, aber wie bestimmst du ob der Punkt in oder ausserhalb der Bahn liegt? Den zweiten Ansatz verfolge ich aktuell gerade selbst. In Mathematica funktioniert der schon mal ganz gut. Das ganze soll auf einem starken Computer laufen - von daher ist Rechenleistung vorhanden. Das Übergeordnete Ziel ist aus einer vorhandenen Strecke und die darin eingezeichnete Ideallinie "ideale" Sensordaten zu erzeugen. Diese möchte ich dann zum lernen eines Deep-Learning Algorythmus verwenden. Und später im Umkehrschluss im selben Programm diesen dann auch testen. |
![]() |
der erste Ansatz klingt interessant, Vor einer ähnlichen Aufgabe steht man auch, wenn man überprüfen muss, ob ein Punkt innerhalb oder außerhalb eines geschlossenen Polygons liegt. Da gibts verschiedene interessante Algorithmen zu finden aber meist wird von dem Punkt aus eine beliebige Gerade gelegt (bzw. ein Strahl) und die Anzahl der Schnittpunkte mit dem Umriss des Bereichs gezählt. Für die konkrete Implementation gibts da oft auch eine Reihe trickreicher Vereinfachungen zu finden, welche den Rechenaufwand senken. Ein bekannter Algorithmus ist nach Jordan benannt de.wikipedia.org/wiki/Punkt-in-Polygon-Test_nach_Jordan aber ein wenig Suche auch auf englischsprachigen Seiten beschert dir vielleicht sogar effizientere Varianten, die du dir zunutze machen kannst und du vl dann schon bevor du den konkreten Schnittpunkt berechnest entscheiden kannst, ob diese überhaupt auf der Polygonseite liegt. aber wie bestimmst du ob der Punkt in oder ausserhalb der Bahn liegt? Das kommt darauf an, wie du den Schnittpunkt bestimmst. Nehmen wir oBdA an, dass sich dein Sensor im Ursprung befindet und die Abszisse (x-Achse) dem Winkel entspricht. Das lässt sich durch eine Verschiebung und Drehung des KS stets so einrichten. Dann hat deine Sensorgerade die Gleichung wobei ist. sei dabei im mathematisch positiven Sinn, also im Gegenuhrzeigersinn, gemessen. Zwei Nachbarpunkte deines Linienzugs seien und . Die Gerade kann nun zB in Parameterdarstellung aufgestellt werden und wird mit der Sensorgeraden geschnitten. Es ergibt sich das folgende Gleichungssystem in und welches die Lösung und hat. Nur wenn gilt liegt der Schnittpunkt innerhalb des Polygonsegments und ist relevant. Dann muss eben sein Abstand vom Sensor mit berechnet werden. Der Fall, dass Sensorgerade und Segment zueinander parallel sind (Division durch Null) müsste gesondert abgefangen werden. Auch eine senkrechte Sensorgerade ist ein Fall, der gesondert behandelt werden muss. Wie gesagt - gut möglich, dass man mit ein paar Tricks noch die eine oder andere Rechenoperation sparen kann. |
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|