md_mse,
der Irrtum bei Deinem ersten Ansatz ist folgender: In der Formel
Delphi-Quellcode:
LenX := XKoordinateVonSplinePunkt;
LenY := YKoordinateVonSplinePunkt;
VecLen := Sqrt(Sqr(LenX) + Sqr(LenY));
Yaw := ArcSin(YKoordinateVonSplinePunkt / VecLen);
geht der Vektor immer vom
Nullpunkt aus zum augenblicklichen Punkt (LenX|LenY). Der Winkel, den Du herausbekommst, ist deshalb immer der Winkel zwischen dem Vektor vom Nullpunkt nach (LenX|LenY) und der x-Koordinate. Du willst aber, wie shmia richtig erkannt hat, die
Ableitung der Splinefunktion haben, um Dein Objekt immer die Kurve entlang gucken zu lassen.
Bei mir ist das mit der Mathe auch schon ein Weilchen her, aber ich würde das so machen: Du suchst die Steigung:
Das ist aber nicht so ohne Weiteres zu berechnen, weil sowohl x, als auch y von "step" abhängen. Erinnerst Du Dich noch an die Kettenregel beim Ableiten von Funktionen? Die verwendet man hier mit Vorteil:
Delphi-Quellcode:
. dy
. -----
. dy dy dstep dstep
.s = ---- = ------- * -------- = --------------
. dx dstep dx dx
. -------
. dstep
Du musst also die y-Komponente Deiner Spline nach "step" ableiten und durch die Ableitung der x-Komponente der Spline nach "step" dividieren. Zeig' die Formel bloss keinem Mathematiker! Der kriegt dann nämlich einen Herzanfall (weil er alle Ausnahmen kennt, unter denen meine Formel falsch ist)!
Probier's trotzdem mal und lass uns wissen ob's damit klappt.
mare_crisium