hell-student
Lieutenant
- Registriert
- Nov. 2007
- Beiträge
- 671
Hallo Zusammen,
ich programmiere gerade in C++ eine Simulation. Hierbei kann man die Laufbahn selbst frei wählen und der Planet soll dann auf der Bahn entlang laufen. Mit Start-Stop Funktion.
Also die Bahn ist in 4 Teile unterteilt und ist mit 4 Bezierkurven jeweils 6ten Grades realisiert. In den Eckstellen ist stetigkeit gegeben(soll hier nicht thematisiert werden). Mein Problem ist, dass jeder Bahnabschnitt unterschiedlich lang sein kann und ich die Länge nicht einfach so messen kann. Einzigste Methode wäre den Abstand zweier benachbarter Punkte, jedoch sehr aufwendig. Also folgendes:
Ich habe 4 Bezierfunktionen wobei jedes t wie bei Wiki-Artikel im Intervall [0,1] ist. Jetzt soll man die Simulation starten können, wobei die Startposition auf irgendeiner der 4 Teilstrecken sein kann (kann aber auch definiert werden, also z.b auf Teilstrecke 1 immer). Jedoch kann nun die Bahn ja beliebig gewählt werden und daher muss der Startpunkt ja nicht in der Mitte des Abschittes liegen. So nun soll für jeden Teilabschnitt eine Geschwindigkeit angebbar sein. Damit es aber nicht zu Rucklern an den Schnittstellen gibt soll nun auf den Strecken die Geschwindigkeit angepasst werden wenn. Z.b von einem Abschnitt 1 mit Speed 5 m/s auf einen Abschnitt 2 mit 1m/s gewechselt wird, soll hierbei bereits im Abschnitt 1 rechtzeitig bzw genau zum richtigen Zeitpunkt die Geschwindigkeit verringert werden damit man auf dem 2ten Abschnitt mit 1m/s sich bewegt. Also eine dynamische anpassung des Speed. Hierbei ist es aber so, dass natürlich jederzeit die Bahn, also jeweils die 4 einzelnen Bezierkurven angepasst werden können und auch die Simulation gestoppt werden kann. Hierbei ist das Problem dass ich dann nicht weiß auf welchem Abschnitt ich mich befinde.
Hoffe ich konnte es einigermaßen gut erklären. Falls erforderlich mach ich mal paar Skizzen.
mfg
Die normalen physikalischen Formeln wie: s = m/2*a*t² oder v = s/t reichen ja nicht. muss ja von einer Geschwindigkeit auf eine andere Beschleunigen oder verzögern. Zudem kann es ja sein, dass die Strecke im Abschnitt zu klein ist, dass die Geschwindigkeit gar nicht erreicht werden kann.
ich programmiere gerade in C++ eine Simulation. Hierbei kann man die Laufbahn selbst frei wählen und der Planet soll dann auf der Bahn entlang laufen. Mit Start-Stop Funktion.
Also die Bahn ist in 4 Teile unterteilt und ist mit 4 Bezierkurven jeweils 6ten Grades realisiert. In den Eckstellen ist stetigkeit gegeben(soll hier nicht thematisiert werden). Mein Problem ist, dass jeder Bahnabschnitt unterschiedlich lang sein kann und ich die Länge nicht einfach so messen kann. Einzigste Methode wäre den Abstand zweier benachbarter Punkte, jedoch sehr aufwendig. Also folgendes:
Ich habe 4 Bezierfunktionen wobei jedes t wie bei Wiki-Artikel im Intervall [0,1] ist. Jetzt soll man die Simulation starten können, wobei die Startposition auf irgendeiner der 4 Teilstrecken sein kann (kann aber auch definiert werden, also z.b auf Teilstrecke 1 immer). Jedoch kann nun die Bahn ja beliebig gewählt werden und daher muss der Startpunkt ja nicht in der Mitte des Abschittes liegen. So nun soll für jeden Teilabschnitt eine Geschwindigkeit angebbar sein. Damit es aber nicht zu Rucklern an den Schnittstellen gibt soll nun auf den Strecken die Geschwindigkeit angepasst werden wenn. Z.b von einem Abschnitt 1 mit Speed 5 m/s auf einen Abschnitt 2 mit 1m/s gewechselt wird, soll hierbei bereits im Abschnitt 1 rechtzeitig bzw genau zum richtigen Zeitpunkt die Geschwindigkeit verringert werden damit man auf dem 2ten Abschnitt mit 1m/s sich bewegt. Also eine dynamische anpassung des Speed. Hierbei ist es aber so, dass natürlich jederzeit die Bahn, also jeweils die 4 einzelnen Bezierkurven angepasst werden können und auch die Simulation gestoppt werden kann. Hierbei ist das Problem dass ich dann nicht weiß auf welchem Abschnitt ich mich befinde.
Hoffe ich konnte es einigermaßen gut erklären. Falls erforderlich mach ich mal paar Skizzen.
mfg
Die normalen physikalischen Formeln wie: s = m/2*a*t² oder v = s/t reichen ja nicht. muss ja von einer Geschwindigkeit auf eine andere Beschleunigen oder verzögern. Zudem kann es ja sein, dass die Strecke im Abschnitt zu klein ist, dass die Geschwindigkeit gar nicht erreicht werden kann.