Table of Contents

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

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.

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.

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.

TR Akrobatik

TR Akrobatik

(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)