Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| kurse:ef05a-2021:kurven:beziergeometrisch [2021/09/22 09:25] – created Ivo Blöchliger | kurse: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: | ||
| + | ===== 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: | ||
| + | |||
| + | 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 '' | ||
| + | * Klammern Sie erst $a$ aus, mit '' | ||
| + | |||
| + | <hidden TR Akrobatik> | ||
| + | <code txt> | ||
| + | (1-t)*a+t*b -> i(t,a,b) | ||
| + | seq(i(t, | ||
| + | {a,b,c,d} -> x | ||
| + | r(r(r(x)))[0] -> p | ||
| + | seq(factor(polyCoeffs(factor(expand(p), | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Mit Maxima ==== | ||
| + | <code txt> | ||
| + | x: | ||
| + | i(t, | ||
| + | r(l): | ||
| + | p: | ||
| + | create_list(factor(coeff(expand(p), | ||
| + | </ | ||
| + | |||
| + | ===== 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. | ||
| + | |||