Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
techniken:catmullrom [2014/12/02 12:06] c.jaedicke |
techniken:catmullrom [2016/01/21 12:45] (aktuell) |
||
---|---|---|---|
Zeile 13: | Zeile 13: | ||
{{ :techniken:romecatmull3.png?nolink&500 |}} | {{ :techniken:romecatmull3.png?nolink&500 |}} | ||
- | Eine umfassende Herleitung des Algorithmus findet ihr [[http://www.cs.cmu.edu/~fp/courses/graphics/asst5/catmullRom.pdf|hier]]. Dieses [[http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf|Paper]] von Yuksel et. al. beschäftigt sich mit der Parametrisierung von Catmull-Rom-Kurven. Wie etwa die Centripetal-Parametrisierung, welche garantiert dass sich die Kurve innerhalb eines Abschnittes nicht selbst schneidet. | + | Eine umfassende Herleitung des Algorithmus findet ihr [[http://www.cs.cmu.edu/~fp/courses/graphics/asst5/catmullRom.pdf|hier]]. Dieses [[http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf|Paper]] von Yuksel et. al. beschäftigt sich mit der Parametrisierung von Catmull-Rom-Kurven, wie etwa die Centripetal-Parametrisierung, welche garantiert dass sich die Kurve innerhalb eines Abschnittes nicht selbst schneidet. |
- | $ | + | ===Algorithmus=== |
+ | Aus der oben genannten Herleitung erhalten wir die Basisfunktionen (In der numerischen analysis auch "blending functions" genannt) der Kurve: | ||
+ | |||
+ | \begin{equation*} | ||
+ | Mu = | ||
+ | \begin{bmatrix} | ||
+ | −\tau u+2\tau u^2 −\tau u^3 \\ | ||
+ | 1+(\tau−3)u^2+(2−\tau)u^3 \\ | ||
+ | \tau u+(3−2\tau)u^2 +(\tau −2)u^3 \\ | ||
+ | −\tau u^2 +\tau u^3 | ||
+ | \end{bmatrix} | ||
+ | \end{equation*} | ||
+ | |||
+ | Dabei bezeichnet $\tau$ die "tension" (Glätt-Faktor) welche Werte im Intervall $[0,1]$ annimmt und $u$ den Zeitpunkt an dem die Funktionen ausgewertet werden. Zu welchen Zeitpunkten die Funktionen ausgewertet werden hängt von der Parametrisierung ab, zum Beispiel wird bei der uniform-Parametrisierung eine feste Anzahl von Punkten gewählt. | ||
+ | Die interpolierte Koordinate ergibt sich nun aus dem Produkt der Matrix eurer Stützpunkte und dem Vektor eurer Basisfunktionen. | ||
+ | |||
+ | \begin{equation*} | ||
+ | \begin{bmatrix} | ||
+ | x \\ | ||
+ | y | ||
+ | \end{bmatrix} | ||
+ | = | ||
+ | \begin{bmatrix} | ||
+ | x_{p_0} & x_{p_1} & x_{p_2} & x_{p_3} \\ | ||
+ | y_{p_0} & y_{p_1} & y_{p_2} & y_{p_3} | ||
+ | \end{bmatrix} | ||
+ | \cdot | ||
\begin{bmatrix} | \begin{bmatrix} | ||
- | a_1 & a_2 & a_3 & a_4 \\\\ | + | −\tau u+2\tau u^2 −\tau u^3 \\ |
- | b_1 & b_2 & b_3 & b_4 \\\\ | + | 1+(\tau−3)u^2+(2−\tau)u^3 \\ |
- | c_1 & c_2 & c_3 & c_4 \\\\ | + | \tau u+(3−2\tau)u^2 +(\tau −2)u^3 \\ |
- | d_1 & d_2 & d_3 & d_4 | + | −\tau u^2 +\tau u^3 |
\end{bmatrix} | \end{bmatrix} | ||
- | $ | + | \end{equation*} |