Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Christbaumbeleuchtung ====== Zur Zeit befinden sich <del>200</del> 500 LEDs auf dem Baum, die einzeln adressiert werden können (und theoretisch je 65k Farben darstellen können). Die LEDs befinden sich an folgenden Positionen (aktualisiert am 23.11.): {{kurse:ef05a-2021:kurven:posdata.py}} Der Nullpunkt des Koordinatensystems befindet sich am Boden mittig unter dem Stamm, die $z$-Achse nach oben). [[kurse:ef05a-2021:kurven:xmastree-math|Mehr zur Mathematik hinter dem Baum]]. ===== Darstellung der 3-dimensionalen Punkte ===== Aktueller Code: {{kurse:ef05a-2021:kurven:vector-class.zip}} Die Punkte werden von einem Augpunkt $A$ auf die $x/z$-Ebene projiziert. Typischerweise ist $A=(0,300,160)$, d.h. man steht 3 m vor dem Baum. * Ergänzen Sie die Vektorklasse um eine Methode ''projectxz(self, a)'' die den projizierten Punkt als zwei-dimensionalen Vektor in der $x/z$-Ebene liefert. * Stellen Sie so den Baum einmal dar. {{kurse:ef05a-2021:kurven:img_20211111_085642596.jpg}} Damit wir uns um den Baum bewegen können, müssten wir auf andere Ebenen projizieren. Es ist aber einfacher einfach den Baum zu drehen. Ein Punkt $(x,y)$ wird wie folgt mit dem Winkel $\alpha$ um den Ursprung gedreht: $$ \begin{array}{rcl} x' & = & \cos(\alpha)x - \sin(\alpha)y \\ y' & = & \sin(\alpha)x + \cos(\alpha)y \\ \end{array} $$ * Ergänzen Sie die Vektorklasse um eine Methode ''rotatexy(self, alpha)'', die den um den Winkel $\alpha$ um die $z$-Achse gedrehten Vektor liefert. * Stellen Sie den rotierenden Baum dar. ===== Farben ===== <code python hsvtorgb.py> # from https://stackoverflow.com/questions/24852345/hsv-to-rgb-color-conversion # Input: Dezimalzahlen zwischen 0.0 und 1.0 # Output: Dezimalzahlen zwischen 0.0 und 1.0 def hsv_to_rgb(h, s, v): if s == 0.0: return (v, v, v) i = int(h*6.) # XXX assume int() truncates! f = (h*6.)-i; p,q,t = v*(1.-s), v*(1.-s*f), v*(1.-s*(1.-f)); i%=6 if i == 0: return (v, t, p) if i == 1: return (q, v, p) if i == 2: return (p, v, t) if i == 3: return (p, q, v) if i == 4: return (t, p, v) if i == 5: return (v, p, q) </code> In TigerJython <code python> setColor(r,g,b) # Achtung, r,g,b müssen Ganzzahlen von 0-255 sein (z.B. setColor(int(r), int(g), int(b)) </code> {{kurse:ef05a-2021:kurven:img_20211118_090128261.jpg}} ===== Animation ===== Programmieren Sie eine Funktion ''farbe(t,v)'', wobei $t$ die Zeit in Sekunden und $v$ die Position einer LED ist. Die Funktion berechnet dazu die Farbe, die dann auf dem Baum dargestellt werden soll. Neuerungen im Code: * Positionen sind in der Datei posdata.py gespeichert und werden mit import in den Code eingebunden. * Code zur Umwandlung hsv->rgb eingebunden * Zeitmessung (import time) * Funktion, die die Farbe setzt Aktueller Code: {{kurse:ef05a-2021:kurven:vector-class.zip}} Aktueller C++ Code vom «echten» Christbaum: https://github.com/techlabksbg/xmastree kurse/ef05a-2021/kurven/xmastree.txt Last modified: 2021/11/29 07:48by Ivo Blöchliger