kurse:efcomputergrafik:kw7

Bessere Bahnkurven

Gegeben $x_i$: Punkte, durch die die Bahn gehen soll.

Gesucht $l_i$, $r_i$: Linke (rückwärts) und rechte (vorwärts) Kontrollpunkte. Hilfsvariable $\lambda$.

Gleichungen: \begin{align*} (r_i-x_i) & = \lambda (x_i - l_i) & \text{Tangenten fallen zusammen} \\ N_i(0) & = N_{i-1}(1) & \text{Beschleunigungsvektor ist stetig} \\ \tau_i(0) & = \tau_{i-1}(1) & \text{Torsion ist stetig} \\ \end{align*}

Siehe https://en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas#Formulas_in_n_dimensions

und https://en.wikipedia.org/wiki/Torsion_of_a_curve#Alternative_description

Schön und gut, aber die Gleichungen sind nichtlinear… z.B. sieht die letzte Gleichung etwa so aus: $${{\left(\left(3\,{\it ri}_{1}-3\,\xi_{1}\right)\,\left(6\,\xi_{2}- 12\,{\it ri}_{2}+6\,{\it lip}_{2}\right)-\left(6\,\xi_{1}-12\, {\it ri}_{1}+6\,{\it lip}_{1}\right)\,\left(3\,{\it ri}_{2}-3\, \xi_{2}\right)\right)\,\left(6\,{\it xip}_{3}-6\,\xi_{3}+18\, {\it ri}_{3}-18\,{\it lip}_{3}\right)+\left(\left(6\,\xi_{1}-12\, {\it ri}_{1}+6\,{\it lip}_{1}\right)\,\left(3\,{\it ri}_{3}-3\, \xi_{3}\right)-\left(3\,{\it ri}_{1}-3\,\xi_{1}\right)\,\left(6\, \xi_{3}-12\,{\it ri}_{3}+6\,{\it lip}_{3}\right)\right)\,\left(6\, {\it xip}_{2}-6\,\xi_{2}+18\,{\it ri}_{2}-18\,{\it lip}_{2}\right)+ \left(\left(3\,{\it ri}_{2}-3\,\xi_{2}\right)\,\left(6\,\xi_{3}-12\, {\it ri}_{3}+6\,{\it lip}_{3}\right)-\left(6\,\xi_{2}-12\, {\it ri}_{2}+6\,{\it lip}_{2}\right)\,\left(3\,{\it ri}_{3}-3\, \xi_{3}\right)\right)\,\left(6\,{\it xip}_{1}-6\,\xi_{1}+18\, {\it ri}_{1}-18\,{\it lip}_{1}\right)}\over{\left(\left(3\, {\it ri}_{2}-3\,\xi_{2}\right)\,\left(6\,\xi_{3}-12\,{\it ri}_{3}+6 \,{\it lip}_{3}\right)-\left(6\,\xi_{2}-12\,{\it ri}_{2}+6\, {\it lip}_{2}\right)\,\left(3\,{\it ri}_{3}-3\,\xi_{3}\right)\right) ^2+\left(\left(6\,\xi_{1}-12\,{\it ri}_{1}+6\,{\it lip}_{1}\right)\, \left(3\,{\it ri}_{3}-3\,\xi_{3}\right)-\left(3\,{\it ri}_{1}-3\, \xi_{1}\right)\,\left(6\,\xi_{3}-12\,{\it ri}_{3}+6\,{\it lip}_{3} \right)\right)^2+\left(\left(3\,{\it ri}_{1}-3\,\xi_{1}\right)\, \left(6\,\xi_{2}-12\,{\it ri}_{2}+6\,{\it lip}_{2}\right)-\left(6\, \xi_{1}-12\,{\it ri}_{1}+6\,{\it lip}_{1}\right)\,\left(3\, {\it ri}_{2}-3\,\xi_{2}\right)\right)^2}}={{\left(\left(3\,\xi_{1}-3 \,{\it li}_{1}\right)\,\left(6\,\xi_{2}+6\,{\it rim}_{2}-12\, {\it li}_{2}\right)-\left(6\,\xi_{1}+6\,{\it rim}_{1}-12\, {\it li}_{1}\right)\,\left(3\,\xi_{2}-3\,{\it li}_{2}\right)\right) \,\left(-6\,{\it xim}_{3}+6\,\xi_{3}+18\,{\it rim}_{3}-18\, {\it li}_{3}\right)+\left(\left(6\,\xi_{1}+6\,{\it rim}_{1}-12\, {\it li}_{1}\right)\,\left(3\,\xi_{3}-3\,{\it li}_{3}\right)-\left(3 \,\xi_{1}-3\,{\it li}_{1}\right)\,\left(6\,\xi_{3}+6\,{\it rim}_{3}- 12\,{\it li}_{3}\right)\right)\,\left(-6\,{\it xim}_{2}+6\,\xi_{2}+ 18\,{\it rim}_{2}-18\,{\it li}_{2}\right)+\left(\left(3\,\xi_{2}-3\, {\it li}_{2}\right)\,\left(6\,\xi_{3}+6\,{\it rim}_{3}-12\, {\it li}_{3}\right)-\left(6\,\xi_{2}+6\,{\it rim}_{2}-12\, {\it li}_{2}\right)\,\left(3\,\xi_{3}-3\,{\it li}_{3}\right)\right) \,\left(-6\,{\it xim}_{1}+6\,\xi_{1}+18\,{\it rim}_{1}-18\, {\it li}_{1}\right)}\over{\left(\left(3\,\xi_{2}-3\,{\it li}_{2} \right)\,\left(6\,\xi_{3}+6\,{\it rim}_{3}-12\,{\it li}_{3}\right)- \left(6\,\xi_{2}+6\,{\it rim}_{2}-12\,{\it li}_{2}\right)\,\left(3\, \xi_{3}-3\,{\it li}_{3}\right)\right)^2+\left(\left(6\,\xi_{1}+6\, {\it rim}_{1}-12\,{\it li}_{1}\right)\,\left(3\,\xi_{3}-3\, {\it li}_{3}\right)-\left(3\,\xi_{1}-3\,{\it li}_{1}\right)\,\left(6 \,\xi_{3}+6\,{\it rim}_{3}-12\,{\it li}_{3}\right)\right)^2+\left( \left(3\,\xi_{1}-3\,{\it li}_{1}\right)\,\left(6\,\xi_{2}+6\, {\it rim}_{2}-12\,{\it li}_{2}\right)-\left(6\,\xi_{1}+6\, {\it rim}_{1}-12\,{\it li}_{1}\right)\,\left(3\,\xi_{2}-3\, {\it li}_{2}\right)\right)^2}}$$

Wie löst man so was?

Ansatz: Gradientenabstieg

  • Man beginnt mit einer Lösung (z.B. jene, die das aktuelle Programm liefert).
  • Man bring die obigen Gleichungen auf die Form “Term = 0”.
  • Man leitet Term nach jeder Variablen ab (z.B. nummerisch)
  • Diese partiellen Ableitungen geben die Richtung an, in welche man die Variablen verändern muss, damit die Gleichung “besser” stimmt. In diese Richtung wird ein “kleiner” Schritt gemacht und wiederholt.
  • kurse/efcomputergrafik/kw7.txt
  • Last modified: 2020/02/12 10:59
  • by Ivo Blöchliger