kurse:ef05a-2021:kurven:xmastree

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:xmastree [2021/11/08 06:39] – [Darstellung der 3-dimensionalen Punkte] Ivo Blöchligerkurse:ef05a-2021:kurven:xmastree [2021/11/29 06:48] (current) Ivo Blöchliger
Line 1: Line 1:
 +====== 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