matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenTrigonometrische FunktionenErzeugung einer S-Kurve
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
Forum "Trigonometrische Funktionen" - Erzeugung einer S-Kurve
Erzeugung einer S-Kurve < Trigonometr. Fktn < Analysis < Oberstufe < Schule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Trigonometrische Funktionen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Erzeugung einer S-Kurve: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 01:26 Sa 21.12.2019
Autor: urben

Hallo,

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt

Ich programmiere ein Spiel und bin auf das folgende Problem gestoßen:

In einem Teil der Wegfindung von Computer-gesteuerten Spielern erzeuge ich Parameter einer S-Kurve. Meine Funktion beginnt mit dessen Erzeugung mit folgenden Parametern:

Die Figur befindet sich an Punkt P.
Das Ziel wo die Figur hin will liegt auf Punkt Q.

Die Figur steht in einem bestimmten Winkel α relativ zur x-Achse.
Die Figur soll in einem bestimmten Winkel β relativ zur x-Achse beim Ziel ankommen.

Die Winkel haben einen Definitionsbereich von 0° bis 360°, es sind also stumpfe Winkel möglich wenn die Figur Richtung Negativbereich der y-Achse blickt.

Meine Funktion geht zur Vereinfachung davon aus dass die Figur am Nullpunkt steht und das Ziel auf dem Punkt (1|0).

Die S-Kurve besteht aus zwei (im Spezialfall einem) Kreisbögen mit identischen Radius und jeweils dem Winkel des Kreisbogens.

Mein Problem liegt beim Radius. Dieser wird allein aus den Winkeln α und β bestimmt. Da Figur und Ziel in der Regel nicht 1 Einheit voneinander entfernt sind, wird das Ergebnis später mit der Strecke zwischen P und Q multipliziert.

Meine gefundene Formel erzeug bereits gute Ergebnisse - jedoch nur in der Hälfte der Fälle. Dies sollen folgende Grafiken visualisieren:

[Externes Bild http:///abload.de/img/problemskurve99j4u.png]

Im oberen Bild der Fall den ich mir wünsche. Im unteren, wo ich erwarten würde das obere Bild entlang der X-Achse gespiegelt vorzufinden, funktioniert die Formel nicht. Sehr größe Kreisbögen werden erzeugt.

Ich will nun meine Formel vorstellen, die ich verwende:

Im oberen Bild sieht man sehr gut meinen Ansatzpunkt.
Senkrecht zum ersten blauen Vektor ist die Strecke r eingezeichnet. Ebenso beim Zielvektor, hier jedoch nicht links vom Vektor sondern rechts.
Die Punkte beider Strecken sind mit einer weiteren Strecke verbunden, welche die Länge 2r aufweist.

Der Punkt am Ende der Strecke von P(0|0) mit der Länge r befindet sich bei x = r*cos(α - π/2) | y = r*sin(α - π/2).
Der Punkt am Ende der Strecke von P(1|0) mit der Länge r befindet sich bei x = 1 + r*cos(β + π/2) | y = r*sin(β + π/2).
(Ich ziehe π/2 vom Winkel ab da sich die Strecke rechts vom Vektor befinden, bzw füge sie hinzu wenn sie links vom Vektor steht)
Die Länge zwischen diesen Punkten beträgt 2r. Also stelle ich die Gleichung...
[mm] (2r)^2=(1+r*cos(\beta+\pi/2)-r*cos(\alpha-\pi/2))^2+(r*sin(\beta+\pi/2)-r*sin(\alpha-\pi/2))^2 [/mm]
... nach r um:
$ r = (sqrt(-2 [mm] cos(\alpha) cos(\beta) [/mm] + [mm] sin^2(\alpha) [/mm] + [mm] sin^2(\beta) [/mm] + 2) + [mm] sin(\alpha) [/mm] + [mm] sin(\beta))/(2 cos(\alpha [/mm] - [mm] \beta) [/mm] - 2)  $

Und diese Formel für r erzeugt obige S-Kurven.

Mein Lösungsansatz war es einfach die Vorzeichen in den ersten zwei Formeln zu ändern, also...
x = r*cos(α - π/2) | y = r*sin(α - π/2)
y = 1 + r*cos(β + π/2) | y = r*sin(β + π/2).
... zu ...
x = r*cos(α + π/2) | y = r*sin(α + π/2)
y = 1 + r*cos(β - π/2) | y = r*sin(β - π/2).
... da die Kurve ja nicht immer zuerst nach links und dann nach rechts geht, sondern auch mal umgekehrt. Aber dies erzeugt keine Änderung bei meiner Endformel.

Meine Formel erzeugt also nur dann einen korrekten Radius, wenn ich damit eine Links-Rechts Kurve erzeuge.

Wie kann ich also die Formel ändern, sodass eine Rechts-Links Kurve erzeugt wird, wenn die Links-Rechts Kurve nicht zufriedenstellend ist?

Ich hoffe ich konnte mein Problem deutlich darstellen.
Mit GeoGebra lässt sich meine S-Kurve wie oben zu sehen öffnen. Mit dem Verschieben der Punkte C und E passt sich die Kurve an. Download für die GeoGebra Datei: https://mega.nz/#!Md5zAIzK!wjoufASe2VuAUUXRLf7GWOjFRRjsT2C84LaYoFghQBc
Gruß

Dateianhänge:
Anhang Nr. 1 (Typ: png) [nicht öffentlich]
Anhang Nr. 2 (Typ: ggb) [nicht öffentlich]
        
Bezug
Erzeugung einer S-Kurve: Antwort
Status: (Antwort) fertig Status 
Datum: 00:11 Mo 23.12.2019
Autor: Marc

Hallo urben,

[willkommenmr]

nettes Problem :-)

Es scheint mir grundsätzlich richtet, für die Rechts-Links-Kurve die Vorzeichen von [mm] $\frac\pi2$ [/mm] zu ändern.

> [mm](2r)^2=(1+r*cos(\beta+\pi/2)-r*cos(\alpha-\pi/2))^2+(r*sin(\beta+\pi/2)-r*sin(\alpha-\pi/2))^2[/mm]
>  ... nach r um:
>  [mm]r = (sqrt(-2 cos(\alpha) cos(\beta) + sin^2(\alpha) + sin^2(\beta) + 2) + sin(\alpha) + sin(\beta))/(2 cos(\alpha - \beta) - 2) [/mm]

Könntest du hiervon mal die Rechnung posten, oder ich mache es später selbst, wenn ich Zeit habe, da ich hier die Ursache für die fehlende Kurvenlösung vermute. Einmal würde ich gerne sehe, dass die Additionstheoreme richtig angewendet wurden, und zum anderen müsste es sich doch um eine quadratische Gleichung in $r$ handeln, die zwei Lösungen besitzt. Evtl. ist die zweite einfach die gesuchte.

Übrigens hat dein Fragestellung und deine Lösung ein Problem im Fall [mm] $\alpha=\beta$, [/mm] wegen der dann entstehenden Null im Nenner. Über diesen Fall musst du dir noch Gedanken machen. Und die Lösungen in der Nähe der Definitionslücke werden auch nicht schön aussehen, sondern ziemlich extreme Verläufe haben.

Viele Grüße
Marc

Bezug
                
Bezug
Erzeugung einer S-Kurve: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:10 Mi 25.12.2019
Autor: urben

Hallo Marc!

Ich stelle Formeln dieser Größe, muss ich zugeben, mit Wolfram Alpha um.
Ich hätte erwähnen sollen dass diese sehr wohl bereits die zweite Lösung der quadratischen Funktion ausgegeben hat. Ich erwähnte das aber nicht da diese zweite Lösung nur das negative Ergebnis hervorbringt.

Der Fall mit [mm] \alpha [/mm] = [mm] \beta [/mm] habe ich auch bereits abgedeckt und erhalte glücklicherweise recht kleine Radien damit.

Ich habe mittlerweile die Lösung trotzdem gefunden indem ich die Vorzeichen von [mm] \alpha [/mm] und [mm] \beta [/mm] in meiner Endformel gewechselt habe. Leider geschah das eher durch herumspielen statt sauberer Herleitung. Es wäre interessant zu wissen warum der Vorzeichenwechsel von [mm] \pi/2 [/mm] nicht funktionierte...

Jedenfalls, ich komme nun zur zweiten Hälfte meines Algorithmus. Ich möchte die Winkel der beiden Bögen bestimmen. Hier habe ich noch keinen guten Ansatz da ich noch nicht weiß wie ich die Fallunterscheidung mache ob der Außenwinkel oder Innenwinkel verwendet werden soll.

Im Anhang nochmal ein Beispiel einer Rechts-Links Kurve, mit den blauen Winkeln als Eingangsparameter und den roten als die gesuchten Ergebnisse. (links erste Kurve, rechts zweite)

Dateianhänge:
Anhang Nr. 1 (Typ: png) [nicht öffentlich]
Bezug
                        
Bezug
Erzeugung einer S-Kurve: Antwort
Status: (Antwort) fertig Status 
Datum: 14:55 Do 26.12.2019
Autor: leduart

Du solltest die dem Bogen zugewendeten Winkel verwenden, ihre Differenz ist die Winkeländerung von Anfang zum Ende deiner S Kurve. also von den 125° auf 26° zur x-Achse
Gruß leduart

Bezug
                                
Bezug
Erzeugung einer S-Kurve: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 22:58 Do 26.12.2019
Autor: urben

Das ist mir leider nicht abstrakt genug. Ich will die Lösung in einen Computer-Algorithmus schreiben und brauche eine formale Beschreibung, wie der richtige Winkel ermittelt wird.

Ich weiß dass bei einer Rechts-Links Kurve der erste gesuchte Winkel jener ist, der von der Gerade von (0|0) zum ersten Punkt um diesen herum startet und im Uhrzeigersinn die nächste Gerade erreicht.

Nur gelingt es mir nicht dies mathematisch zu beschreiben. Mir fallen nur Ansätze für überaus komplizierte Methoden ein die ich nicht wirklich einsetzen will.

Bezug
                                        
Bezug
Erzeugung einer S-Kurve: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 07:03 Sa 28.12.2019
Autor: urben

Hallo,
Ich habe meine Lösung gefunden. Ich habe prinzipiell ein überschlagenes Viereck angenommen und das Ergebnis scheint auch bei regulären Vierecken aufzugehen.

Die Frage kann also als gelöst markiert werden.

Bezug
        
Bezug
Erzeugung einer S-Kurve: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:54 Sa 28.12.2019
Autor: Al-Chwarizmi

Hallo urben

Ich finde deine Fragestellung recht interessant.
Anstelle deines Lösungsansatzes mit aneinander
gefügten Kreisbögen wäre aber vermutlich auch
eine Lösung mittels  []Splines in Frage gekommen.

Die dabei entstehenden Kurven hätten den Vorteil
einer etwas höheren Differenzierbarkeit (die man
je nach Wunsch auch noch ein Stück weit durch
passende Ansätze steuern könnte). Eine Kurve aus
aneinandergesetzten Kreisbögen ist an der "Nahtstelle"
in der Regel nicht zweimal differenzierbar.

Anscheinend hast du aber schon eine zufriedenstellende
Lösung gefunden.

Alles Gute zum Jahreswechsel !


Bezug
                
Bezug
Erzeugung einer S-Kurve: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:18 So 29.12.2019
Autor: urben

Die Lösung ist zufriedenstellend aber ich bin offen für rechensparsamere Kurven.
Das Ziel ist konkret eine Kurve von A nach B mit jeweils vorgegebenen Winkeln auf der Ebene. Der Charakter bewegt sich dann auf einem Polygonzug mit konstanter Segmentlänge auf dieser Kurve. Das gute an meiner Lösung dabei ist dass die Kurvenparameter nur einmal berechnet werden und dann immer nur der selbe Wert vom aktuellen Winkel abgezogen wird und der Wert beim Wendepunkt ein Vorzeichenwechsel erfährt.
Ich kenne mich mit Splines zu wenig aus um sicher zu sein, jedoch denke ich das fällt nicht so einfach aus.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Trigonometrische Funktionen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]