kurse:ef05a-2021:kurven:beziergeometrisch

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
kurse:ef05a-2021:kurven:beziergeometrisch [2021/09/22 13:01] Ivo Blöchligerkurse:ef05a-2021:kurven:beziergeometrisch [2021/11/04 08:39] (current) – [Explizite Formel] Ivo Blöchliger
Line 1: Line 1:
 +====== 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
 +
 +<hidden TR Akrobatik>
 +<code txt>
 +(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)))
 +</code>
 +</hidden>
 +
 +==== Mit Maxima ====
 +<code txt>
 +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);
 +</code>
 +
 +===== 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.
 +