kurse:efcomputergrafik:kw48

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:efcomputergrafik:kw48 [2019/11/27 09:33] – [Interpolation mit kubischen Funktionen] Ivo Blöchligerkurse:efcomputergrafik:kw48 [2019/12/04 10:48] (current) – [Text-Analyse mit Python] Ivo Blöchliger
Line 1: Line 1:
 +====== Algebraische Form ======
 +Bestimmen Sie die algebraische Form der Bezierkurven von Grad 1,2,3 (und $n$, wer möchte), und zwar
 +als konvexe Kombination der Kontrollpunkte mit den Koeffizienten als vollständig faktorisierte Polynome in $t$.
 +
 +
 +===== Form der Polynome und deren Ableitungen =====
 +Kontrollpunkte $\vec p_0$ bis $\vec p_n$:
 +$$
 +\vec p(t) = \sum_{i=0}^n {n \choose i} (1-t)^{n-i} \cdot t^i \cdot \vec p_i
 +$$
 +
 +Für Grad 3:
 +$$
 +\vec p(t) = (1-t)^3 \cdot \vec p_0 + 3(1-t)^2t \cdot \vec p_1  + 3 \cdot (1-t)t^2 \cdot \vec p_2 + t^3 \cdot \vec p_3
 +$$
 +===== Ableitungen von $p(t)$ für $t \in [0,1]$ =====
 +
 +$$
 +v(t) = -3(1-t)^2 \cdot \vec p_0 +
 +3(1-t)(1-3t)\cdot \vec p_1 +
 +3t(2-3t) \cdot \vec p_2 +
 +3t^2 \cdot \vec p_3
 +$$
 +
 +Man findet $\vec v(0) = 3(\vec p_1 - \vec p_0)$, also Tangente parallel zu $P_0P_1$.
 +Analog mit $\vec v(1) = 3(\vec p_3 - \vec p_2)$.
 +
 +Mit Maxima:
 +<code maxima>
 +p(t,a,b,c,d):=(1-t)^3*a+3*(1-t)^2*t*b+3*(1-t)*t^2*c+t^3*d;
 +define(v(t), factorout(diff(p(t,a,b,c,d),t),t));
 +tex(v(t));
 +define(a(t), factorout(diff(v(t),t),t));
 +tex(a(t));
 +</code>
 +liefert
 +$$3\,d\,t^2+3\,b\,\left(t-1\right)\,\left(3\,t-1\right)-3\,c\,t\,
 + \left(3\,t-2\right)-3\,a\,\left(t-1\right)^2$$
 +und
 +$$-6\,c\,\left(3\,t-1\right)+6\,b\,\left(3\,t-2\right)+6\,d\,t-6\,a\,
 + \left(t-1\right)$$
 +
 +Interessant sind auch hier die Werte von $a(0)$ und $a(1)$:
 +$$a(0) = 6\,c-12\,b+6\,a$$
 +$$a(1) = 6\,d-12\,c+6\,b$$
 +
 +
 +===== Darstellung von Kurven vom Grad 1 und 2 mit Hilfe von einer Kurve vom Grad 3 =====
 +==== Grad 1 ====
 +Damit die Geschwindigkeit für $t=0$ übereinstimmt, müssen die Kontrollpunkte sich bei $t=\frac{1}{3}$ und $t=\frac{2}{3}$ befinden. Beweis mit Maxima (ein OpenSource CAS-Programm):
 +<code maxima>
 +p(t,a,b,c,d):=(1-t)^3*a+3*(1-t)^2*t*b+3*(1-t)*t^2*c+t^3*d;
 +factorout(expand(p(t, a, (2/3*a+1/3*b), a/3+2/3*b,b)),t);
 +tex(%);
 +</code>
 +liefert:
 +$$b\,t+a\,\left(1-t\right)$$
 +==== Grad 2 ====
 +Für den Grad zwei, mit Kontrollpunkten $q_0, q_1, q_2$ ist $\vec v(0) = 2(\vec q_1-\vec q_0)$. Damit die Geschwindigkeiten für $t=0$ übereinstimmen muss $p_1 = \frac{1}{3}q_0 + \frac{2}{3}q_1$ sein. Analog für $p_2$.
 +Beweis wieder mit Maxima:
 +<code maxima>
 +p(t,a,b,c,d):=(1-t)^3*a+3*(1-t)^2*t*b+3*(1-t)*t^2*c+t^3*d;
 +factorout(expand(p(t, a, (2/3*b+1/3*a), c/3+2/3*b,c)),t);
 +tex(%);
 +</code>
 +liefert: 
 +$$c\,t^2-2\,b\,\left(t-1\right)\,t+a\,\left(t-1\right)^2$$
 +
 +
 +====== Analyse von SVG-Pfaden ======
 +Dokumentation:
 +  * Intro: https://www.w3schools.com/graphics/svg_path.asp
 +  * Bisschen ausführlicher: https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
 +  * Specs: https://www.w3.org/TR/svg-paths/
 +
 +
 +====== Vorgehen ======
 +**Ziel**: 
 +
 +SVG-Datei mit Inkscape erstellen -> Python Programm das die Pfade ausliest -> Konvertieren in Polygonzug -> Umrechnen in Plotter-Koordinaten -> Plotter Befehle -> WhiteBoard verschönern.
 +
 +Wäre cool: {{ :kurse:efcomputergrafik:hello.svg |}}
 +
 +  * Umgang mit Inkscape (erstellen von Pfaden)
 +  * Analyse der SVG-Datei
 +    * Welche Pfad-Element müssen implementiert werden, wie funktionieren diese?
 +    * Text-Analyse, Konvertierung der Daten in Python
 +  * Bezier-Klasse erstellen (für Kurven von Grad 1 bis 3).
 +    * Initialisierung
 +    * Zeichnen (Validierung)
 +    * Interpolation
 +  * Pfad-Klasse erstellen
 +    * Als Sammlung von Bezier-Kurven
 +  * Plotter Koordinatensystem analysieren
 +    * Geometrische Definition
 +    * Ausmessen im Tech-Lab
 +    * Nullpunkt festlegen
 +  * Plotter Sprache definieren
 +    * Koordinaten
 +    * Stift auf/ab
 +  * Arduino-Code anpassen
 +
 +===== Umgang mit Inkscape =====
 +
 +Download für die Schulcomputer: https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:blc:informatik:glf19:glf19#make_the_computer_zimmer_great_again
 +
 +Nützliche Tastenkombinationen:
 +  * F1: Auswahlmodus (zum kopieren, löschen, verschieben, rotieren)
 +  * F2: Edit-Modus (Manipulation der Pfadelemente).
 +
 +Pfad-Manipulationen:
 +  * Shift-Ctrl-C: Object to Path (Kreise, Rechtecke, Text wird erst *nicht* als Pfad gespeichert.) Bei Text ist danach noch eine Gruppe aufzulösen.
 +  * Ctrl-K: Combine (mehrere Pfade in einen Pfad zusammenfassen). 
 +