Den Stier bei den Klothoiden gepackt!
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Den Stier bei den Klothoiden gepackt!
Grundsätzlich finde ich es gut, wenn man zeigt, womit man sich so beschäfigt, weil ich es für inspirierend halte, was andere so machen.
Da ich üblicherweise nix programmiere, was irgendwie vorzeigbar wäre, aber den gestrigen Tag dazu genutzt habe, meinen Viewer mal auf Kurven-Objekte umzuarbeiten, nutze ich das hier mal die Gelegenheit zu zeigen, womit ich mich derzeit beschäftige.
Ich bastel gerade an meinen Geometrie-Klassen herum und da ich bald Klothoiden im Job brauche, habe ich mich damit heute mal etwas beschäftigt. Klothoiden sind Kurven, deren Krümmung linear zunimmt. Vereinfacht ausgedrückt: Eine Autobahnabfahrt: Man lenkt gleichmäßig ein.
Im Prinzip also ganz einfach, bis zu dem Zeitpunkt an dem man es programmieren will, weil da aus Prinzip nix klappt: Gefolgt von lustigen Fehlermeldungen, die man mitten in einer Entwicklungssitzung auch nicht erwartet: Die SSD war wirklich voll, aber eben nur so knapp voll, dass ich seit mindestens einer Woche vermutlich auf den letzten 10 freien Megabytes kompiliere... gut für die Langlebigkeit einer SSD
Aber man nähert sich langsam an: Und so langsam kommt da auch ein Schwung rein, den man eigentlich so gar nicht haben wollte: bis man endlich am Ziel ist: Und schon sitzt man wieder drei Stunden am Computer. Für mich ist jetzt Zeit für etwas Wochenende und ein Erkältungsbad.
Da ich üblicherweise nix programmiere, was irgendwie vorzeigbar wäre, aber den gestrigen Tag dazu genutzt habe, meinen Viewer mal auf Kurven-Objekte umzuarbeiten, nutze ich das hier mal die Gelegenheit zu zeigen, womit ich mich derzeit beschäftige.
Ich bastel gerade an meinen Geometrie-Klassen herum und da ich bald Klothoiden im Job brauche, habe ich mich damit heute mal etwas beschäftigt. Klothoiden sind Kurven, deren Krümmung linear zunimmt. Vereinfacht ausgedrückt: Eine Autobahnabfahrt: Man lenkt gleichmäßig ein.
Im Prinzip also ganz einfach, bis zu dem Zeitpunkt an dem man es programmieren will, weil da aus Prinzip nix klappt: Gefolgt von lustigen Fehlermeldungen, die man mitten in einer Entwicklungssitzung auch nicht erwartet: Die SSD war wirklich voll, aber eben nur so knapp voll, dass ich seit mindestens einer Woche vermutlich auf den letzten 10 freien Megabytes kompiliere... gut für die Langlebigkeit einer SSD
Aber man nähert sich langsam an: Und so langsam kommt da auch ein Schwung rein, den man eigentlich so gar nicht haben wollte: bis man endlich am Ziel ist: Und schon sitzt man wieder drei Stunden am Computer. Für mich ist jetzt Zeit für etwas Wochenende und ein Erkältungsbad.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Den Stier bei den Klothoiden gepackt!
Mit der Sprache LOGO wäre die Programmierung solch einer Kurve ein Klacks...
Unter https://necips8.wordpress.com/sourcen/ findest Du meine Umsetzung der Turtle-Steuerung: "class Turtle.cpp"
Schau Dir mein "Sonne, Mond, Erde" Beispiel an. Der SourceCode dazu sieht so aus:
Unter https://necips8.wordpress.com/sourcen/ findest Du meine Umsetzung der Turtle-Steuerung: "class Turtle.cpp"
Schau Dir mein "Sonne, Mond, Erde" Beispiel an. Der SourceCode dazu sieht so aus:
Code: Alles auswählen
void draw() {
background (0);
t0 .dc();
Universum .dc();
Sonne .dc();
Erde .dc();
Mond .pt(t0).pu().dg(360-w).fw(Erde.ra() + 30).pd().ra(10).dc();
h1.pt(t0).dg(w++).fw(Sonne.ra()).dc();
for (float dg=0;dg<360;dg+=4) {
h2.pt(h1).dg(dg);
for (float i=0;i < 600;i++) {
h2.fw(2);
if (!Universum.ic(h2))
break;
if (Erde.ic(h2))
break;
if (Mond.ic(h2))
break;
}
}
}
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Den Stier bei den Klothoiden gepackt!
Nur zu.Necip hat geschrieben:Mit der Sprache LOGO wäre die Programmierung solch einer Kurve ein Klacks...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Den Stier bei den Klothoiden gepackt!
Ich werde Dir morgen eine iterative Lösung anbieten. Jetzt gehe ich mit meinem Balou Gassi!
Na, eine Sekunde habe ich noch:
Im Prinzip geht es doch um einen Kreis, der sich immer mehr verjüngt. Die Bedingungen sind, dass sie aus einer geraden Linie entspringt und wieder in einer geraden Linie mündet.
REPAEAT 36 [FW 10 LT 10]
bildet ein Kreis
man muss herausfinden, wie man den Linksdreh (bzw. Rechtsdreh) so ändert, dass... hmm. interessante Aufgabenstellung!
Na, eine Sekunde habe ich noch:
Im Prinzip geht es doch um einen Kreis, der sich immer mehr verjüngt. Die Bedingungen sind, dass sie aus einer geraden Linie entspringt und wieder in einer geraden Linie mündet.
REPAEAT 36 [FW 10 LT 10]
bildet ein Kreis
man muss herausfinden, wie man den Linksdreh (bzw. Rechtsdreh) so ändert, dass... hmm. interessante Aufgabenstellung!
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Den Stier bei den Klothoiden gepackt!
Oder man betrachtet die Linie, die der Vektor
http://www.wolframalpha.com/input/?i=po ... *e%5E(i*x)
zieht, wobei a und phi entsprechende Parameter für den Laufparameter x sind.v(x)=a*xe^(i*phi*x)
http://www.wolframalpha.com/input/?i=po ... *e%5E(i*x)
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Den Stier bei den Klothoiden gepackt!
Ich brauchte nur leider nicht irgendeine Kurve, die sich verjüngt und es geht auch nicht um einen Kreis, sondern diese Kurve ist dadurch gekennzeichnet, dass ihre Krümmung linear zunimmt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Den Stier bei den Klothoiden gepackt!
Ich hatte einiges um die Ohren die letzten Tage. Sorry for the delay...
Du hast doch bereits eine sehr hübsche Lösung erdacht. Daran möchte ich auch nicht rütteln und schütteln.
Ich möchte hier nur eine grobe Lösung skizzieren. Soweit ich verstanden habe geht es bei diesen Krümmungen um eine angenehme Annäherung, damit z.B. die Autos sanft in den Berufsverkehr oder Berufsstau eingeschläust werden.
Das Programm zeichnet zwei Kurvenverläufe der zurückgelegten Strecken. Das eine Auto fährt horizontal auf der Autobahn. Das andere Auto (von oben und hinten, später auch von oben und vorne, heranpirschend) orientiert sich am vorbeifahrenden Fahrzeug.
Zunächst der NULL - Test. Keine Krümmung. Verfahren: Kamikaze!
Beim nächste Video nähert sich der Fahrer von hinten.
Und hier nähert er sich von vorne auf das Auto zu, um sich anschließend hinten anzuschließen:
Ich finde die Kurven recht harmonisch, ob sie linear zunimmt steht auf einem anderen Blatt. Die Beweisführung lasse ich den Mathematikern, eigentlich sind es ja Arithmetiker, da Mathematik gar nichts mit Zahlen zu tun hat!
Du hast doch bereits eine sehr hübsche Lösung erdacht. Daran möchte ich auch nicht rütteln und schütteln.
Ich möchte hier nur eine grobe Lösung skizzieren. Soweit ich verstanden habe geht es bei diesen Krümmungen um eine angenehme Annäherung, damit z.B. die Autos sanft in den Berufsverkehr oder Berufsstau eingeschläust werden.
Das Programm zeichnet zwei Kurvenverläufe der zurückgelegten Strecken. Das eine Auto fährt horizontal auf der Autobahn. Das andere Auto (von oben und hinten, später auch von oben und vorne, heranpirschend) orientiert sich am vorbeifahrenden Fahrzeug.
Zunächst der NULL - Test. Keine Krümmung. Verfahren: Kamikaze!
Beim nächste Video nähert sich der Fahrer von hinten.
Und hier nähert er sich von vorne auf das Auto zu, um sich anschließend hinten anzuschließen:
Ich finde die Kurven recht harmonisch, ob sie linear zunimmt steht auf einem anderen Blatt. Die Beweisführung lasse ich den Mathematikern, eigentlich sind es ja Arithmetiker, da Mathematik gar nichts mit Zahlen zu tun hat!
Code: Alles auswählen
// Klothoiden Null
TTurtle t1 = new TTurtle();
TTurtle t2 = new TTurtle();
void setup() {
size (200,200);
background (0);
stroke (255);
strokeWeight (1);
frameRate (20);
t1.xy(10,10).dg(40);
t2.xy(90,90).dg(90);
}
void draw() {
t1.fw(1);
t2.fw(1);
}
// Klothoiden 1
TTurtle t1 = new TTurtle();
TTurtle t2 = new TTurtle();
void setup() {
size (200,200);
background (0);
stroke (255);
strokeWeight (1);
frameRate (20);
t1.xy(10,10).dg(40);
t2.xy(90,90).dg(90);
}
void draw() {
t1.la(t2);
t1.fw(1);
t2.fw(1);
}
// Klothoiden -1
TTurtle t1 = new TTurtle();
TTurtle t2 = new TTurtle();
void setup() {
size (200,200);
background (0);
stroke (255);
strokeWeight (1);
frameRate (20);
t1.xy(90,10).dg(40);
t2.xy(10,90).dg(90);
}
void draw() {
t1.la(t2);
t1.fw(1);
t2.fw(1);
}
Re: Den Stier bei den Klothoiden gepackt!
... dient auch zur Berechnung eines Abfangkurses, während das Zielobjekt in der Warteschleife kreis:
Die Sourcen befinden sich auf meiner DropBox im Verzeichnis "Klothoiden"
Code: Alles auswählen
TTurtle t1 = new TTurtle();
TTurtle t2 = new TTurtle();
void setup() {
size (300,300);
background (0);
stroke (255);
strokeWeight (1);
frameRate (10);
t1.xy(10,10).dg(45);
t2.xy(90,90).dg(90);
}
void draw() {
t1.la(t2).fw(1);
t2.fw(1).lt(1);
}
Die Sourcen befinden sich auf meiner DropBox im Verzeichnis "Klothoiden"
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Den Stier bei den Klothoiden gepackt!
Die Sprache heißt Logo...?
Für mich ergibt das so noch keinen Sinn. Kannst Du den Quelltext etwas erklären?
Für mich ergibt das so noch keinen Sinn. Kannst Du den Quelltext etwas erklären?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Den Stier bei den Klothoiden gepackt!
Das ist die Programmiersprache: LOGO.
Ich habe die Syntax auf Java umgesetzt und erweitert und die Anwendung mit Processing implementiert
Ich habe die Syntax auf Java umgesetzt und erweitert und die Anwendung mit Processing implementiert
Code: Alles auswählen
TTurtle t1 = new TTurtle(); // Zwei Instanzen meiner Turtle-Classe (siehe Sourcen)
TTurtle t2 = new TTurtle();
// Diese Routine wird einmal für die Initialisierung aufgerufen
void setup() {
size (300,300); // Grösse des Dialogs
background (0); // Hintergrundfarbe schwarz
stroke (255); // Stiftfarbe weiß
strokeWeight (1); // Stiftstärke
frameRate (10); // Bilder pro Sekunde
t1.xy(10,10).dg(45); // Turtle 1 auf die XY Position 10,10 setzen und Kopf um 45 Grad drehen
t2.xy(90,90).dg(90); // Turtle 2 auf die XY Position 90,90 setzen und Kopf um 90 Grad drehen. (Horizontale Linie)
}
// Diese Routine wird je Frameanzahl mal Sekunden aufgerufen
void draw() {
t1.la(t2).fw(1); // Turtle 1 schaue auf (la = look at) Turtle 2, dann 1 Schritt vorgehen (fw = forward)
t2.fw(1).lt(1); // Turtle 2 gehe 1 Schritt vor und drehe den Kopf um 1 Grad nach links (lt = left)
}