Splines

Alles um das Arbeiten mit digitalen topografischen Karten, den Ziegler-Tools, Microdem usw.

Moderator: Roland Ziegler

Antworten
Nachricht
Autor
Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

Splines

#1 Beitrag von Roland Ziegler »

Die Geschichte hat mir dann doch keine Ruhe gelassen.

Also ist eine Klasse CubicSpline entstanden, soweit ausgearbeitet, dass sie irgendwann man in die anderen Werkzeuge integriert werden kann.

Mein CubicSpline kann als "Natural Spline" laufen - dann werden für die Randpunkte die jeweilige Steigung (Tangentenwinkel, 1. Ableitung) aus dem Spline berechnet -, oder als "Clamped Spline" - da wird die Steigung der Randpunkte vorgegeben.

Der Cubic Spline besteht aus Polynomen 3. Grades, und zwar jeweils unterschiedliche zwischen zwei benachbarten Stützpunkten.

Genauer gesagt existieren zwischen zwei Stützpunkten je 2 Polynome, eines für x und eines für y, in Abhängigkeit eines Parameters t,
also y = f(t) und x = g(t).

An einem Stützpunkt gelten für die hier aneinanderstoßenden Polygone die selben Steigungen (1. Ableitung). Dies wird mit ein wenig Trickserei über die Ermittlung der 2. Ableitung gewährleistet. Es entsteht dabei eine sogenannte Tridiagonalmatrix, die sich geschlossen und sehr einfach lösen lässt.

Die Länge von Splines kann man jedoch nicht in geschlossener Form ermitteln, siehe dxf-Thread. Ich habe numerische Integration nach Simpson benutzt. Damit bekommt man die Länge s für einen bestimmten Wert des Parameters t.

Wenn ich jetzt den Spline abwickle, d.h. in Zusi-gerechte Geradenstückchen zerlege, benötige ich aber die Umkehrfunktion, nämlich den Parameter t als Funktion der Länge s. Denn zur Bestimmung jedes Punktes kann ich nachher nur für t die Funktionen f(t) und g(t) anwenden.

Umkehrfunktionen kann man z.B. über Bisektion ermitteln, sowie es im Absteckrechner für alles und jedes gemacht wird (dort "binäre Iteration" getauft). Da aber schon die Längenberechnung selbst eine Iteration ist (Simpson), könnte eine ausgiebige zweite Iteration spürbar auf die Rechenzeit gehen. Also habe ich mit Nullstellenbestimmung nach Newton-Raphson experimentiert (das Verfahren wird auch bei meiner Implementation der transversalen Mercator-Projektion benutzt). Die dafür benötigte 1. Ableitung liegt eh vor, weil sie für die Längenberechnung schon verwendet wurde. Newton-Raphson konvergiert bereits nach 4 oder 5 Schritten.



Zwei Bildchen:

Zunächst ein Natural Spline mit 4 Stützpunkten (grüne Linie). Den Spline selber sieht man nicht, sondern nur seine Zerlegung in viele kurze Geraden (rote Linie). Beim 2. Punkt sieht man besonders deutlich, dass zwischen 1. und 2. Punkt etwas ausgeholt werden muss, um den 2. Punkt auch zu treffen. Die Steigungen der Randpunkte ergeben sich aus dem Spline, sie sind hier nicht fest vorgegeben.

Als Anwendung schwebt mir, wie im anderen Thread erwähnt, der vereinfachte Bau von Straßen und Flüssen vor. Glücklicherweise müssen Zusi-Straßen ja keine Baurichtlinien erfüllen.

Bild

Das andere Bild zeigt einen Clamped Spline, mit nur zwei Punkten. Der Spline muss einen 90°-Bogen modellieren. Die Steigungen der Randpunkte sind jetzt also fest vorgegeben, 0° und 90°.

Was man hier schön sieht, ist dass Splines als Konstruktionselemenmt nur bedingt tauglich sind. Die Tangenten passen zwar, aber von einer ordentlichen Kurve kann kaum die Rede sein. Der klassiche Ansatz aus Klothoide, Kreisbogen und wieder Klothoide ist zwar für den Konstrukteur aufwändiger, kommt aber mit den zwei Vorgabepunkten und den zwei Steigungen aus. Der gezeigte 2-Punkte-Spline würde weitere Stützpunkte benötigen, um eine einigermaßen akzeptable Kurve zu ergeben.

Bild



Zwei Bemerkungen:

1. Splines werden in der Computergraphik sehr intensiv genutzt. Sie sind Feld-, Wald- und Wiesen-Standard. Direct3D kann sie zwar nicht, aber schon GDI oder GDI+ beherrschen sie. Wenn man sich zum ersten Mal davor setzt, ahnt man zunächst nicht, dass für ihre Berechnung ein gar nicht so kleiner Aufwand getrieben werden muss.

2. Ich bin immer wieder erstaunt, wie schnell man mit dem Versuch geschlossene mathematische Lösungsansätze zu finden, vor die Wand läuft, und auf numerische Verfahren ausweichen muss, also auf gut deutsch, sich auf's systematische Probieren verlegt.

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

Absteckrechner um Splines erweitert

#2 Beitrag von Roland Ziegler »

Absteckrechner mit Spline-Unterstützung

Hier mal ein aktueller Zwischenstand:

Bild

Splines werden folgendermaßen erzeugt:
  • Zwischen 1. und 2. Element muss mindestens ein Element liegen (wie sonst auch).
  • Es dürfen aber bis zu 48 weitere Punkte zwischen den beiden AR-Randelementen 1 und 2 liegen. Diese weiteren Punkte werden als Zwischen-Stützpunkte zur Spline-Berechnung verwendet. Im Beispiel sind das drei weitere Punkte.
  • Für die Reigenfolge der Spline-Stützpunkte gilt die logische Reihenfolge der Streckenelelemente, wie in .str-Dateien üblich
  • Für die Punkte an den AR-Randelementen kann der Wichtungsfaktor verändert werden. Dadurch kann man die Krümmungsänderung am Anfang und Ende beeinflussen, also sanftere Kurven erzeugen.
  • Es liegt in der Natur der für kubische Splines geltenden Formeln, dass die Pseudo-Radien am Anfang und Ende des Splines mit die kleinsten sind, die Kurve also übergangslos mit kleinem Radius anfängt, der dann größer wird. Dies hat Gerd Pinter schon mal im TSSF-Forum zu Trainz angesprochen. Mit Hilfe des Wichtungsfaktors kann man darauf Einfluss nehmen.
  • Die Neigung wird als dritte Dimension des Splines gleich mit erzeugt.
  • Auch wenn es sich nicht um Klothoiden und Kreisbögen handelt, kann man Überhöhungen berechnen. Diese wird durch eine Art Pseudo-Radius in den bei der "Abwicklung" entstehenden Koordinaten geprägt. Daraus ergibt sich ggf auch eine Reduzierung der Entwurfsgeschwindigkeit.
  • Bevor ein Spline gespeichert bzw. zum StrEdi übertragen werden kann, muss er explizit nochmal geprüft werden. Erst bei dieser Prüfung werden minimaler (Pseudo)-Radius, maximale Neigung und evtl Reduktion der Geschwindigkeit festgestellt. Da die Prüfung genau wie die Spline-Abwicklung ziemlich rechenaufwändig ist, wird sie nicht automatisch bei jeder Eingabeänderung ausgeführt.
  • Splines sind für den Gleisbau unzulässig. :mua

Benutzeravatar
Michael_Poschmann
Beiträge: 19881
Registriert: 05.11.2001 15:11:18
Aktuelle Projekte: Modul Menden (Sauerland)
Wohnort: Str.Km "1,6" der Oberen Ruhrtalbahn (DB-Str. 2550)

Re: Absteckrechner um Splines erweitert

#3 Beitrag von Michael_Poschmann »

Moin Roland!
Roland Ziegler hat geschrieben: [*]Splines sind für den Gleisbau unzulässig. :mua [/list]
Wo kein Kläger ist... ;)

Offene Fragen bislang: Wie setze ich die "Zwischenpunkte"? Auswahl aus einer Tabelle der Str-Elementnummern vermutlich.

Ist es möglich, die Höhenangabe der Zwischenpunkte *nicht* in die Spline-Berechnung einzubeziehen, also nur zweidimensional ein Kurvengebilde einzupassen, und die z-Koordinaten ausschließlich zwischen Anfangs- und Endstreckenelement auszumitteln?

Interessierte Grüße
Michael

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33450
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#4 Beitrag von Carsten Hölscher »

zweidimensional ein Kurvengebilde einzupassen, und die z-Koordinaten ausschließlich zwischen Anfangs- und Endstreckenelement auszumitteln?
"notfalls" per z-Einebnen im Streckeneddi sehr schnell erledigt

Carsten

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#5 Beitrag von Roland Ziegler »

"notfalls" per z-Einebnen im Streckeneddi sehr schnell erledigt
Dies scheint auch mir der einfachste Weg. Zwar sind, wie im ersten Beitrag hier angedeutet, die Splines aus den drei Dimensionen einzeln zusammengesetzt; das geschieht aber schon recht früh in der Verarbeitung, und die verschiedenen numerischen Algorithmen habe ich so umgesetzt, dass sie diese 3 Dimensionen erwarten und nicht 2 + 1.

Als Alternative zum Einebnen könnte sich die geplante nachträglich anzubringende Neigungskurve anbieten, die dann Neigungswechsel auch wieder ausrunden würde.

Was die Zwischenstützpunkte angeht: Das ist so einfach wie man vermutet. Alles, was sich logisch an Elementen zwischen den AR-Begrenzungselementen 1 und 2 befindet, wird zum Stützpunkt. Dies unter dem Hinblick, dass die Basis zum Bau üblicherweise eine Rohtrasse ist.

Eine Beta-Version mit Spline-Unterstützung - sonst äußerlich alles beim alten - kann auf Wunsch zur Verfügung gestellt werden. Voraussetzung: CD13 oder TransDEM wg. der benötigten DLLs.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33450
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#6 Beitrag von Carsten Hölscher »

Eine Beta-Version mit Spline-Unterstützung
mmmh, Straßenbau ist gerade abgeschlossen, aber vielleicht kommen ja noch Korrekturen, also *Meld*

Carsten

Benutzeravatar
Stefan Pint AG
Beiträge: 503
Registriert: 05.01.2002 22:56:28
Aktuelle Projekte: Kbs 786

#7 Beitrag von Stefan Pint AG »

Hallo!

Ich muss gestehen, dass ich höchst beeindruckt Deine Beiträge zum Thema gelesen habe, Roland. Auch wenn ich nur sehr wenig von dem verstanden habe, was in den Überlegungen steht. :O
Ich würde gerne auch einmal Testen. Ich befürchte nur, dass ich in nächster Zeit nicht dazu kommen werde. ;(

Gruß

Stefan

Benutzeravatar
Wolfgang Hüttner
Beiträge: 748
Registriert: 14.03.2003 15:10:13
Aktuelle Projekte: Netz Nordbaden, Weserbergland
Wohnort: Neckarsteinach

#8 Beitrag von Wolfgang Hüttner »

Hallo Roland,

erste Versuche mit der neuen Spline-Funktion lieferten tolle Ergebnisse, diese Funktion ist wirklich ideal für den Straßen- und Gewässerbau. :] :]

Folgende Wünsche hätte ich allerdings noch dazu:
- Beim Anwählen von Splines sollten Regelwerte und Überhöhung automatisch deaktiviert werden, bei Anwahl einer anderen Funktion wieder aktiviert werden.
- Die Standardeinstellung von Mindestlänge 2m führt zu sehr vielen sehr kurzen Streckenelementen (und damit später zu sehr vielen Polygonen). Hier sollte es für die Spline-Funktion eigene Einstellparameter geben. Bei meinen Experimenten hat sich eine Mindestlänge von 10m als ausreichend erwiesen, die Anzahl der erzeugten Elemente reduzierte sich dabei von 334(mit 2m) auf 70 bei einer Bachlänge von ca. 1300m.

Gruß
Wolfgang

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#9 Beitrag von Roland Ziegler »

Beim Anwählen von Splines sollten Regelwerte und Überhöhung automatisch deaktiviert werden, bei Anwahl einer anderen Funktion wieder aktiviert werden.
Wenn dieses auch anderen Anwendern genehm ist, kann ich das so machen.
Die Standardeinstellung von Mindestlänge 2m führt zu sehr vielen sehr kurzen Streckenelementen (und damit später zu sehr vielen Polygonen). Hier sollte es für die Spline-Funktion eigene Einstellparameter geben.
Das wird weniger die kurze Mindestlänge sein, als die zulässige Winkeländerung. Diese bestimmt die Länge, und wenn die Länge dann zu kurz ist, wird auf Mindestlänge erhöht.

Auch hier gilt: wenn allgemein gewünscht, kann ich einen zweiten Parametersatz für Splines vorhalten.

Benutzeravatar
Michael_Poschmann
Beiträge: 19881
Registriert: 05.11.2001 15:11:18
Aktuelle Projekte: Modul Menden (Sauerland)
Wohnort: Str.Km "1,6" der Oberen Ruhrtalbahn (DB-Str. 2550)

#10 Beitrag von Michael_Poschmann »

Roland Ziegler hat geschrieben:
Beim Anwählen von Splines sollten Regelwerte und Überhöhung automatisch deaktiviert werden, bei Anwahl einer anderen Funktion wieder aktiviert werden.
Wenn dieses auch anderen Anwendern genehm ist, kann ich das so machen.
Damit wäre ich nicht ganz so glücklich. Ändern der Überhöhung im Streckeneditor auf Null geht doch wesentlich flotter als das nachträgliche Einbauen von Überhöhungsrampen, oder?

Michael

F(R)S-Bauer
Beiträge: 6297
Registriert: 09.11.2002 02:00:47

#11 Beitrag von F(R)S-Bauer »

Bau eine Schalter ein.
Verstehe die IT, heute: IoF -> Internet over Fax, eine Deutsch Erfindung...

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33450
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#12 Beitrag von Carsten Hölscher »

Splines mit Überh. dürften bei mir die absolute Ausnahme sein. Aus meiner Sicht wäre es okay.

Carsten

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#13 Beitrag von Roland Ziegler »

Den Schalter gibt es ja jetzt schon.

Michael hat aus meiner Sicht recht: Plattklopfen ist einfacher als versuchen, nachträglich anzulegen. Übrigens werden auch Straßenkurven mit Querneigung gebaut.

Benutzeravatar
Michael_Poschmann
Beiträge: 19881
Registriert: 05.11.2001 15:11:18
Aktuelle Projekte: Modul Menden (Sauerland)
Wohnort: Str.Km "1,6" der Oberen Ruhrtalbahn (DB-Str. 2550)

#14 Beitrag von Michael_Poschmann »

Roland Ziegler hat geschrieben: Übrigens werden auch Straßenkurven mit Querneigung gebaut.
So isses. Wer würde denn auf die Idee kommen, Splines für den Gleisbau einzusetzen?!? :]

Michael

Benutzeravatar
Wolfgang Hüttner
Beiträge: 748
Registriert: 14.03.2003 15:10:13
Aktuelle Projekte: Netz Nordbaden, Weserbergland
Wohnort: Neckarsteinach

#15 Beitrag von Wolfgang Hüttner »

Roland Ziegler hat geschrieben:Übrigens werden auch Straßenkurven mit Querneigung gebaut.
Zusi ist in erster Linie eine Eisenbahnsimulation, Straßen sind dort im allgemeinen nur zur Ausschmückung vorhanden. Ich glaube auch nicht, dass die Querneigung der Straßen der Überhöhung von Bahnstrecken entspricht.

Und dann bleibt da noch die Frage, ob die Funktion Fluß /Straße entlang Vektoren überhaupt die Überhöhung berücksichtigt ?( .

Gruß
Wolfgang

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33450
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#16 Beitrag von Carsten Hölscher »

dürfte mit Überhöhung sein, da mit der Gleisbetterstellung verwandt.

Ich würde dann aber für einen Schalter plädieren, dessen Einstellung, sich der AR merkt, denn ich werde sonst garantiert (versehentlich) diverse Flüsse mit Überhöhung bauen...

Carsten

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#17 Beitrag von Roland Ziegler »

Es gibt diesen Schalter, als Checkbox. Und ich denke mittlerweile, es ist für den Anwender einfacher (verständlicher und nachvollziehbarer), hier alles zu lassen wie es ist: Das Anlegen der Überhöhung wird explizit ein- oder ausgeschaltet, durch Anklicken der Checkbox, unabhängig von der Kurvenart, und bleibt so bis zur nächsten Betätigung.

Benutzeravatar
Gerd_Pinter
Beiträge: 492
Registriert: 11.08.2004 10:17:02
Aktuelle Projekte: KBS680
Wohnort: Raesfeld
Kontaktdaten:

#18 Beitrag von Gerd_Pinter »

Mal ne neugierige, vielleicht auch doofe Frage:

Wenn man die Splines zum Streckenbauen nicht verwenden darf, wieso haben sie dann eine Überhöhung/Überhöhungsrampe??
Haben die etwa auch einen Übergangsbogen??


Gruss Gerd
Befürworter des Nichtrauchverbotes in Raucherabteilen. Selbst nun seit August 2006 Nichtraucher seiend!!

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#19 Beitrag von Roland Ziegler »

Nein, sie haben keine Übergangsbögen, genausowenig wie Geraden oder Kreisbögen. Das wäre mathematisch gar nicht möglich. Splines sind hier einfach eine Näherung. Die Effekte bei der Verwendung von Splines hast Du selbst ja schon im anderen Forum geschildert. Die werden durch die Art der mathematischen Kurve verursacht und sind in bestimmtem Maß noch durch Tangentengewichte zu beeinflussen, aber nicht zu eliminieren.

Ich berechne für die Überhöhung einen Pseudo-Radius für einen angenommenen, differentiell kurzen Kreisbogen an einzelnen Punkten im Spline. Die Überhöhung ist so für jeden Punkt genommen korrekt, im Ganzen aber nicht vorbildgetreu.

Warum also trotzdem zuschaltbare Überhöhung?
  1. Straßen haben auch eine Querneigung. Splines wären da trotzdem genauso verkehrt. Aber mit Splines baut man schneller.
  2. Nicht alle Gleise sind vorschriftenkonform verlegt. Bei meinem Vorbild Eritrea z.B. herrscht gesundes Augenmaß. Bei manch anderer Schmalspurbahn wird es ähnlich sein. Auch hier erhoffe ich mir mit Splines eine deutliche Produktivitätssteigerung gegenüber Normbau.

Antworten