====== 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: {{kurse:ef05a-2021:kurven: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. {{kurse:ef05a-2021:kurven:bezier-explizit.jpg}} 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 (1-t)*a+t*b -> i(t,a,b) seq(i(t,x[n],x[n+1]),n,1,dim(x)-1) -> r(x) {a,b,c,d} -> x r(r(r(x)))[0] -> p seq(factor(polyCoeffs(factor(expand(p),x[n]),x[n]))[1]), n, 1, 4))) ==== 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.