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 07:41]
Ivo Blöchliger [Darstellung der 3-dimensionalen Punkte]
kurse:ef05a-2021:kurven:xmastree [2021/11/29 07:48] (current)
Ivo Blöchliger
Line 1: Line 1:
 ====== Christbaumbeleuchtung ====== ====== Christbaumbeleuchtung ======
-Zur Zeit befinden sich 200 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+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.): 
-<hidden Positionen der LEDs> + 
-<code python> +{{kurse:ef05a-2021:kurven:posdata.py}}
-leds = [[44.6, 22.6, 112.3], [-2.4, 9.7, 163.1], [-0.0, 9.5, 163.6], [-8.3, -5.0, 170.8], [-24.8, 18.2, 63.9], [-26.0, 5.2, 66.8], [-24.6, 5.0, 69.5], [-27.3, 5.8, 75.0], [-12.3, 6.3, 83.0], [-24.5, 4.5, 85.3], [-21.3, 1.2, 91.7], [-22.6, 6.7, 102.3], [-17.5, 4.5, 96.3], [-25.0, 4.0, 99.3], [-26.9, -2.6, 102.5], [-16.7, 4.3, 108.3], [-57.4, -3.7, 118.4], [-18.0, 5.1, 119.0], [-19.4, 1.0, 129.3], [-14.1, 7.7, 133.5], [-6.9, 1.9, 139.7], [-15.1, 8.0, 146.4], [-12.4, 1.2, 153.1], [-12.6, 6.4, 158.7], [-14.2, 1.3, 166.8], [-8.5, 7.8, 166.7], [-12.1, 4.7, 178.7], [-5.8, 0.2, 182.7], [1.8, -1.6, 178.6], [3.8, -0.1, 168.8], [13.3, 2.2, 169.9], [8.7, 2.8, 167.9], [9.4, -0.2, 153.9], [14.1, 7.3, 147.1], [18.8, -4.5, 146.9], [11.1, 2.0, 138.5], [23.6, 5.8, 131.5], [16.4, -2.2, 127.8], [19.9, -2.3, 122.2], [25.2, -5.2, 115.5], [22.9, 6.0, 110.3], [32.3, -7.0, 105.5], [26.4, -3.7, 99.2], [31.4, -7.9, 91.4], [36.5, -0.1, 86.3], [34.0, -5.8, 82.5], [42.0, 2.7, 76.6], [33.7, -16.0, 70.0], [29.0, -4.6, 66.1], [38.7, -6.4, 60.4], [36.8, -7.5, 55.6], [33.8, -5.7, 45.3], [33.2, -4.2, 44.5], [28.5, -12.7, 37.0], [20.8, -24.9, 36.5], [23.8, -28.9, 41.1], [-0.3, -36.7, 42.5], [18.7, -27.0, 54.4], [25.3, -32.5, 61.8], [18.8, -27.7, 67.4], [10.5, -30.2, 67.3], [25.7, -28.6, 78.8], [19.7, -36.5, 87.2], [21.6, -30.8, 91.7], [13.7, -24.6, 95.1], [10.0, -24.5, 104.1], [10.9, -29.0, 109.5], [14.1, -22.7, 115.0], [2.7, -27.3, 120.2], [10.8, -21.0, 130.4], [14.8, -16.1, 132.6], [2.4, -14.7, 143.1], [4.5, -11.8, 145.4], [-1.7, -15.0, 152.6], [3.7, -13.8, 159.8], [0.7, -6.8, 163.4], [-0.2, -4.3, 170.8], [-0.1, -5.5, 179.7], [2.9, 4.3, 177.4], [-5.5, 5.2, 172.5], [-12.1, 8.9, 172.2], [-13.0, 9.6, 167.2], [-7.8, 14.1, 161.3], [-15.0, 12.8, 153.5], [-14.5, 10.1, 147.2], [-12.8, 20.5, 140.4], [-15.3, 18.0, 132.7], [-15.4, 18.3, 128.9], [-17.7, 22.8, 122.3], [-15.1, 23.9, 115.5], [-17.0, 31.9, 112.4], [-14.9, 32.7, 102.7], [-13.9, 33.1, 99.2], [-15.0, 34.7, 92.6], [-14.2, 34.5, 86.2], [-18.6, 40.2, 81.9], [-18.1, 34.3, 73.7], [-15.3, 40.8, 67.5], [-12.1, 32.2, 61.0], [-17.2, 36.6, 57.4], [-9.9, 32.6, 51.0], [-14.0, 36.8, 46.5], [-3.2, 36.7, 42.9], [-8.8, 31.2, 35.6], [4.4, 38.8, 42.3], [-1.6, 43.9, 48.3], [6.3, 45.0, 53.5], [4.7, 44.5, 54.8], [-1.0, 47.5, 63.7], [1.7, 41.5, 67.8], [-1.8, 40.7, 74.9], [0.9, 45.5, 76.1], [-0.7, 37.9, 81.8], [0.1, 40.0, 85.6], [2.1, 35.0, 94.3], [3.7, 36.1, 102.2], [-4.8, 37.4, 110.5], [3.3, 32.9, 111.3], [1.9, 29.0, 115.9], [-5.8, 21.6, 124.9], [-3.8, 26.6, 130.6], [-3.9, 21.0, 134.1], [-4.5, 25.9, 140.9], [-1.4, 20.8, 143.1], [-5.0, 20.6, 153.4], [1.3, 16.5, 158.1], [-6.5, 17.0, 166.4], [-5.6, 12.9, 168.9], [2.0, 7.2, 171.4], [2.6, 8.1, 179.8], [4.2, 1.2, 176.4], [9.2, -9.4, 174.2], [6.7, -8.5, 165.5], [11.9, -6.9, 160.6], [11.9, -6.8, 153.8], [13.8, -15.8, 151.5], [13.4, -10.7, 143.8], [22.5, -12.6, 141.0], [18.9, -14.9, 133.8], [22.6, -14.9, 126.4], [23.2, -16.4, 116.6], [24.7, -16.0, 115.0], [26.7, -15.6, 108.9], [32.5, -10.6, 101.3], [28.4, -14.7, 93.7], [33.7, -12.2, 89.4], [33.6, -12.2, 87.5], [29.0, -14.0, 76.9], [30.7, -13.1, 73.6], [29.5, -19.9, 64.0], [26.1, -17.3, 63.2], [30.7, -15.5, 50.8], [34.8, -6.9, 49.9], [31.3, -6.2, 46.0], [25.4, 5.7, 46.7], [24.4, 4.8, 44.9], [27.1, 8.3, 46.2], [31.5, 14.6, 52.3], [34.2, 17.4, 56.9], [28.6, 18.2, 60.4], [32.1, 15.0, 69.0], [24.4, 20.2, 76.0], [23.0, 21.7, 85.6], [21.9, 21.0, 85.7], [14.1, 16.2, 90.6], [24.4, 14.2, 95.6], [14.8, 15.8, 106.7], [13.9, 6.2, 109.9], [16.9, 16.0, 119.7], [16.4, 12.0, 122.2], [14.2, 8.6, 128.7], [5.8, 1.2, 137.4], [8.9, 11.3, 142.3], [9.2, 4.6, 146.8], [6.7, 4.8, 153.3], [5.5, 8.8, 161.8], [3.8, 6.4, 165.7], [-7.5, 2.2, 174.8], [0.6, -3.3, 179.9], [-5.4, 0.8, 183.5], [-3.1, 3.6, 180.9], [1.0, 11.4, 175.2], [5.5, 8.4, 172.2], [3.5, 17.8, 160.4], [2.5, 19.0, 159.3], [9.6, 15.7, 150.7], [2.9, 20.9, 141.4], [9.8, 22.0, 138.8], [12.2, 20.0, 133.1], [5.5, 22.3, 124.2], [6.7, 19.9, 117.5], [9.5, 23.4, 112.0], [8.8, 23.0, 105.1], [9.7, 32.1, 97.4], [13.6, 24.0, 90.8], [16.5, 26.6, 88.8], [10.4, 26.9, 82.8], [11.9, 28.4, 75.1], [14.1, 35.6, 67.0], [15.2, 29.2, 65.9]] +
-</code> +
-</hidden>+
  
 Der Nullpunkt des Koordinatensystems befindet sich am Boden mittig unter dem Stamm, die $z$-Achse nach oben). 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 ===== ===== 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. 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.   * 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.   * 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. 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.
Line 26: Line 32:
  
  
 +
 +===== 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.1636353664.txt.gz
  • Last modified: 2021/11/08 07:41
  • by Ivo Blöchliger