N
(Hab mir den code jetzt nicht durchgelesen.)
Vielleicht kann ich dir mit den Vektoren weiterhelfen:
Ein Vektor ist in deinem Fall zweidimension, ich kenne mich aber nur mit dreidimensionalen Vektoren aus. Ich benutz jetzt mal das, sollte ja keinen Unterschied machen.
Ein richtungsvektor besteht aus, (in deinem Fall) zwei Zahlen, die einem Punkt im Koordinatensystem entsprechen. Wir nehemen als z-koordinate einfach 0. Die Länge eines Vektors berechnet sich aus der Wurzel der Summe der Quadrate der Komponenten. Einen Vektor nennt man normalisiert, wenn er die länge 1 hat. Man normalisiert einen Vektor, indem man jeden Komponenten durch die Länge teilt. Das besondere an einem normalisierten Richtungsvektor ist, dass er immer noch in die selbe Richtung zeigt wie der ausgangsvektor. Den Richtungsvektor zw. 2 Punkten errechnet sich aus der Differenz des 2. und des 1. Punktes (Komponentweise subtraktion). Das Rotieren ist interessanter. Dreidimensional mach ich das über quaternions, obs zweidimensional was besseres gibt, weiß ich net. Ein vektor wird als quaternion mit dem skalarteil 0 dargestellt. Ein Winkel a der Rotationsachse v(norm. Vektor) wird als quaternion (cos(a/2),x·sin(a/2),y·sin(a/2),z·sin(a/2))
dargestellt. Das rotierte quaternion r brechnet sich als
r=a*p*a' (a - winkel, p - Koordinate, beide als quaternion)
a' ist die konjugierte Form von a.
Die konjugierte Form eines quaternion ergibt sich als q'=(q.s,-q.i,-q.j,-q.k)
Multilikation von quaternionen:
s = s1s2 - i1i2 - j1j2 - k1k2
i = s1i2 + i1s2 + j1k2 - k1j2
j = s1j2 + j1s2 + k1i2 - i1k2
k = s1k2 + k1s2 + i1j2 - j1i2 (könnte falsch sein, hab ich jetzt ausm Kopf...)
Ich hoffe das hilft, auch wenns gleich ne ganze Menge ist...