Geometrische Definition von Bézierkurven
Eine Bézierkurve $n$-ten Grades ist definiert durch $n+1$ Kontrollpunkte. Die einzelnen Punkte auf der Kurve lassen sich durch einen Parameter $t \in [0,1]$ parametrieren.
Grad 1
Die Bezierkurve vom Grad 1 mit den Kontrollpunkten $p_0$ und $p_1$ entspricht der Menge aller konvexen Kombinationen der beiden Punkte:
$$ p(t) = (1-t) \cdot p_0 + t \cdot p_1 =: I(t, p_0, p_1) $$ Die Funktion $I$ interpoliert linear zwischen $p_0$ und $p_1$ für $t \in [0,1]$.
Programmierung einer Vektor-Klasse in Python
Ziel ist es, komfortabel mit Vektoren arbeiten zu können. Insbesondere benötigen wir
- Addition, Subtraktion und
- Multiplikation mit einer Zahl.
Aktueller Code: vector-class.zip
Rekursiver Code
Die Berechnung nimmt eine Liste von $n+1$ Punkten entgegen, und berechnet damit $n$ neue Punkte. Wenn $n=1$ ist man fertig, ansonsten reduziert man die Liste in gleicher Weise weiter.
Explizite Formel
Wir werden die allgemeine Formel formal herleiten.
Man kann dies auch direkt rechnerisch algebraisch tun, ist aber ziemlich mühsam. Und TR ist dafür, naja, bedingt zu gebrauchen.
Betrachtung der Polynome, die die einzelnen Punkte multiplizieren.
- Konvexe Kombination
- Graphen der Polynome
Weitere Herleitungen
Mit Hilfe des TRs soll die explizite Formel für den Punkt $P(t)$ auf der kubischen Bezierkurve berechnet werden, die durch die 4 Punkte $a$, $b$, $c$, $d$ definiert wird.
- Wenn Sie den Ausdruck haben, solle Sie ausmultiplizieren Sie mit
expand()
. - Klammern Sie erst $a$ aus, mit
factor(ausdruck, a)
. Notieren Sie sich den Faktor
Mit Maxima
x:[a,b,c,d]; i(t,a,b):=(1-t)*a+t*b; r(l):=makelist(i(t,l[i],l[i+1]), i, 1, length(l)-1); p:r(r(r(x)))[1]; create_list(factor(coeff(expand(p),v)),v,x);
Ableitungen
Gegen ist die kubische Bézier-Kurve $p(t)$ durch die vier Kontrollpunkte $p_0$ bis $p_3$. Wir möchten hier die Ableitungen von $p(t)$ nach $t$ bestimmen und interpretieren.
Implementierung einer Bézier-Klasse (kubisch)
- Array von 4 Vektoren
- $p(t)$
- $v(t)$
- Subdivision in zwei Bézier-Kurven.