Dipl. User mit summa cum laude
Hm .. das sollte doch gar nicht sooo schwer sein ...
Dein Ansatz mit den Rotationsmatrizen ist gar nicht so falsch.
Im Grunde ist deine Spirale doch nichts anderes, als eine Kreisbewegung in einem bewegten Koordinatensystem.
Nehmen wir an, du hast eine eindimensionale Kurve f(t)={x(t),y(t),z(t)}.
Dann kannst du eine Transformation relativ zur Kurve so betrachten, dass du einen Punkt hast, der Ortsfest im Ursprung liegt, dessen Koordinatensystem aber von t abhaengt. Du verwendest also eine von t abhaengige Translationsmatrix, die {0,0,0} auf {x(t),y(t),z(t)} abbildet.
Wenn du nun deine Spirale in der y,z Ebene um die Funktion kreisen lassen willst, muessen wir zusaetzlich die Basisvektoren drehen. Das geht folgendermassen: Zuerst bestimmen wir den Gradienten von f bezueglich t
g = grad f = d/dt f = { dx(t)/dt, dy(t)/dt, dz(t)/dt }
Das ist also ein Vektor, der uns anzeigt, wohin die Funktion als naechstes laufen wird, die Tangente zum "Zeitpunkt" t. Wenn wir nun g normieren, haben wir den neuen Einheitsvektor x(t). Wir muessen also eine Rotationsmatrix verwenden, die {1,0,0} auf das normierte g abbildet. Die anderen beiden Basisvektoren y und z werden einfach mitgedreht. Da es sich um eine Rotationsmatrix handelt, bleibt ihre Orthogonalitaet gewahrt. Allerdings ist diese Rotationsmatrix noch nicht vollstaendig definiert, da sie noch nicht spezifiziert, wie die transformierte Richtung von y und z im Raum ist. Dies sollte sich allerdings dadurch beheben lassen, dass man als weitere Bedingung annimmt, dass das Skalarprodukt von y * R(t) y maximiert wird.
Wir haben nun also eine Rotationsmatrix R(t) und eine Translationsmatrix T(t). Nun brauchen wir eigentlich nur noch den Kreisvektor v(t) = {0, sin(t), cos(t)} zuerst translatieren und danach rotieren, und wir haben den Funktionsvektor s(t), den du wolltest:
s(t) = R(t) T(t) v(t)
Wenn du nun die Matrixmultiplikationen ausfuehrst, erhaellst du eine statische Funktion in Abhaengigkeit von t.
Eine andere Herangehensweise waere folgende:
Eine Kreisbahn senkrecht zum Vektor g ist wie folgt definiert: v * g = 0, ||v|| = R. Alle Vektoren v der konstanten Laenge R, die senkrecht auf g stehen Bilden eine Kreisbahn. Wir haben also die Gleichungen:
v * v = R*R
v * g = 0
Vektor g ist wie gehabt der Gradient von f zum Zeitpunkt t. Noch ist der Mittelpunkt der Kreisbahn der Koordinatenursprung. Soll er Punkt p in der Mitte der Kreisbahn liegen, so ist p zu v hinzuzuadieren. Unsere Kreisbahn hat also die Funktion k = v + p. Man sieht bereits, fuer R -> 0 geht k -> p.
Allerdings ist v bisher nicht vollstaendig bestimmt, denn wir haben 2 Gleichungen und drei unbekannte, naemlich die Komponenten von v. Wir brauchen noch eine dritte Information, um den Vektor v eindeutig zu beschreiben. Hierzu verwenden wir den Winkel zu einem externen Einheitsvektor q, welcher ebenfalls in der Kreisebene liegt. dann gilt: v * q = R * sin alpha. Alpha ist der drehwinkel, und wir koennen, wie in deinem obigen Fall ihn einfach mit t gleichsetzen, und erhalten als dritte Gleichung v * q = R sin(t).
doch was ist q ? Das koennte z.B. die y Achse projeziert in die Kreisebene sein. Das Problem ist nur, wenn g selbst parallel zur y Achse ist. Dann ist die Projektion der Nullvektor. Das ist das selbe Problem, wie in obigen Fall, wo die Rotationsmatrix R(t) nicht eindeutig durch die Abbildung von x auf g definiert ist.
Kannst du allerdings annehmen, dass sich die Funktion f(t) nur in 2 Dimensionen bewegt und in der dritten maximal eine Linearfunktion ist, so kannst du als Bezugsvektor getrost die Projektion der unveraenderlichen Dimension benutzen, da der Gradient in dieser Richtung immer eine Konstante ist, z.B. q = Normale ( {0, 0, dz(t)/dt} ), falls dz(t)/dt eine Konstante ist.
Damit hast du dann alle Informationen, die du brauchst, und kannst das Gleichungssystem loesen. Setzt du nun fuer p f(t) ein, hast du mit k(t) die Funktionskurve deiner Spirale.
Da deine Funktion f(t) = {t,t^3,0} sein soll, ist letzterer Ansatz mit der Bewegung in 2 Dimensionen gegeben, und du kannst q = z setzen.