Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| kurse:efcomputergrafik:kw2 [2019/12/28 09:04] – created Ivo Blöchliger | kurse:efcomputergrafik:kw2 [2019/12/28 20:16] (current) – [Kreise mit kubischen Bezierkurven approximieren] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Schrittmotorsteuerung ====== | ||
| + | Diskrete Schritte, Zeitabstände der Schritte bestimmen Geschwindigkeit. | ||
| + | $$ \vec F=m\cdot \vec a $$ | ||
| + | Problem: Plötzliche Geschwindigkeitsänderung hat unendliche Beschleunigung zur Folge. Dabei können Schritte verloren gehen, unerwünschte Vibrationen in der Maschine ausgelöst werden etc. | ||
| + | Lösungsansatz: | ||
| + | |||
| + | Problem: Bei Polygonen ist jeder Punkt eine Ecke, was zu einer sehr langsamen Maschine führen würde. | ||
| + | |||
| + | Lösungsansatz: | ||
| + | |||
| + | Bezierkurven: | ||
| + | |||
| + | Kurzum: Zum Nachfahren mit Schrittmotoren sind Bezierkurven mühsam. | ||
| + | |||
| + | Viel einfacher wäre es, Kreisbogen zu fahren (konstante Zentripetal-Beschleunigung). Tatsächlich wird das in G-Code normalerweise so gemacht: https:// | ||
| + | |||
| + | Wir werden uns nicht damit befassen, wie wir Bezierkurven allgemein möglichst gut durch Kreisbogen und Geradenstücke annähern können. Stattdessen untersuchen wir das inverse Problem: | ||
| + | |||
| + | ====== Kreise mit kubischen Bezierkurven approximieren ====== | ||
| + | Aufgabe: Finden Sie die Koordinaten von den 4 Kontrollpunkten einer kubischen Bezierkurve so, dass der Viertelkreisbogen des Einheitskreises im ersten Quadranten möglichst gut angenähert wird. | ||
| + | |||
| + | <code maxima> | ||
| + | pts(r) := [[1, | ||
| + | p(t,r) := (1-t)^3*pts(r)[1]+3*(1-t)^2*t*pts(r)[2]+3*(1-t)*t^2*pts(r)[3]+t^3*pts(r)[4]; | ||
| + | d(t, | ||
| + | define(d2(t, | ||
| + | solve(d2(0.5, | ||
| + | solve(d2dt(t, | ||
| + | tmax : rhs(solve(d2dt(t, | ||
| + | solve(d(tmax, | ||
| + | define(dtmax(r), | ||
| + | define(rdiff(r), | ||
| + | load (" | ||
| + | ropt: | ||
| + | 2.0-d(0.5, | ||
| + | plot3d(d(t, | ||
| + | </ | ||
| + | Liefert ein optimales $r\approx 0.5519150244935106$ mit einer Abweichung von $\approx 1.000196076469877$. | ||
| + | Siehe auch http:// | ||
| + | |||
| + | ====== Achterbahn mit Bezierkurven ====== | ||
| + | |||
| + | * Modellierung in Blender | ||
| + | * Auslesen der Kurvendaten | ||
| + | * Berechnung der Geschwindigkeit | ||
| + | * Effektive Beschleunigung und daraus den Normalvektor zur Bahn | ||
| + | * Orthonormales Koordinatensystem zu jedem Bahnpunkt | ||
| + | * Längenparametrierung | ||
| + | * Bahnoptimierung (Annäherung an Kreisbogen, Minimierung der 3. Ableitung) | ||