Den Stier bei den Klothoiden gepackt!

Präsentation und Organisation von eigenen Projekten
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8489
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Den Stier bei den Klothoiden gepackt!

Beitrag von Xin » So Okt 16, 2016 1:15 pm

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:
clothoid_1.png
Gefolgt von lustigen Fehlermeldungen, die man mitten in einer Entwicklungssitzung auch nicht erwartet:
clothoid_2.png
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:
clothoid_3.png
Und so langsam kommt da auch ein Schwung rein, den man eigentlich so gar nicht haben wollte:
clothoid_5.png
bis man endlich am Ziel ist:
clothoid_6.png
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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Necip » Di Okt 25, 2016 3:32 pm

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:

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;
    }      
  }
}  

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8489
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Xin » Di Okt 25, 2016 5:05 pm

Necip hat geschrieben:Mit der Sprache LOGO wäre die Programmierung solch einer Kurve ein Klacks...
Nur zu. :)
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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Necip » Di Okt 25, 2016 8:19 pm

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! :D

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3084
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von cloidnerux » Di Okt 25, 2016 8:31 pm

Oder man betrachtet die Linie, die der Vektor
v(x)=a*xe^(i*phi*x)
zieht, wobei a und phi entsprechende Parameter für den Laufparameter x sind.
http://www.wolframalpha.com/input/?i=po ... *e%5E(i*x)
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8489
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Xin » Di Okt 25, 2016 8:48 pm

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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Necip » Fr Okt 28, 2016 9:58 pm

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!
Bild

Beim nächste Video nähert sich der Fahrer von hinten.
Bild

Und hier nähert er sich von vorne auf das Auto zu, um sich anschließend hinten anzuschließen:
Bild

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);
}  

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Necip » Sa Okt 29, 2016 8:33 am

... dient auch zur Berechnung eines Abfangkurses, während das Zielobjekt in der Warteschleife kreis:

Bild

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"

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8489
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Xin » Sa Okt 29, 2016 4:45 pm

Die Sprache heißt Logo...?
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.

Benutzeravatar
Necip
Beiträge: 122
Registriert: Do Nov 17, 2011 12:03 pm
Kontaktdaten:

Re: Den Stier bei den Klothoiden gepackt!

Beitrag von Necip » Sa Okt 29, 2016 9:11 pm

Das ist die Programmiersprache: LOGO.
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)
}  

Antworten