| Both sides previous revision Previous revision | |
| kurse:efcomputergrafik:kw7 [2020/02/12 09:50] – Ivo Blöchliger | kurse:efcomputergrafik:kw7 [2020/02/12 09:59] (current) – Ivo Blöchliger |
|---|
| | ====== 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. |
| |