summaryrefslogtreecommitdiffstats
path: root/bridge.py
diff options
context:
space:
mode:
authorRaymond Hogenson <rayhogenson@openmailbox.org>2016-09-27 17:28:45 -0400
committerRaymond Hogenson <rayhogenson@openmailbox.org>2016-09-27 17:28:45 -0400
commit0bf53f9ddd3aab57a82999d93955c05eedf620ce (patch)
tree657c413568bda5928ec5a0954107f1e27614ccaa /bridge.py
parentModify lights to select a random color (diff)
downloadbridge-0bf53f9ddd3aab57a82999d93955c05eedf620ce.tar.zst
Move color vectors into separate file
RGB vector has additionally been added, and color mixing happens in RGB.
Diffstat (limited to 'bridge.py')
-rw-r--r--bridge.py68
1 files changed, 7 insertions, 61 deletions
diff --git a/bridge.py b/bridge.py
index 876e84d..22d8da2 100644
--- a/bridge.py
+++ b/bridge.py
@@ -1,6 +1,7 @@
#!/usr/bin/python
"""Simple demo of oscillating colors."""
from __future__ import division
+import color
import colorsys
import lumiversepython
import math
@@ -15,55 +16,6 @@ MIN_TIME = 0.3
MAX_HUE = 169 / 360
MIN_HUE = 250 / 360
-class Vector(object):
- """N-dimensional vector class."""
- def __init__(self, *components):
- """Create a vector from its components."""
- self.components = components
-
- def __add__(self, other):
- """Add two vectors."""
- return Vector(
- *map(lambda x, y: x + y, zip(self.components, other.components))
- )
-
- def __sub__(self, other):
- """Subtract two vectors."""
- return Vector(
- *map(lambda x, y: x - y, zip(self.components, other.components))
- )
-
- def __mul__(self, other):
- """Multiply a vector by a constant."""
- return Vector(*map(lambda x: x * other, self.components))
-
- def __rmul__(self, other):
- """Multiply a constant by a vector."""
- return self.__mul__(other)
-
- def __abs__(self):
- """Return the 2-norm of the vector."""
- return math.sqrt(sum(map(lambda x: x * x, self.components)))
-
-
-def HSV(Vector):
- """HSV 3-vector."""
- def __init__(self, hue, saturation, value)
- super().__init__(hue, saturation, value)
-
- def h(self):
- """Return hue."""
- return self.components[0]
-
- def s(self):
- """Return saturation."""
- return self.components[1]
-
- def v(self):
- """Return value."""
- return self.components[2]
-
-
def get_all_lights(rig):
"""Return a list of all panels."""
return [
@@ -77,12 +29,12 @@ def pick_HSV():
hue = random.random() * (MAX_HUE - MIN_HUE) + MIN_HUE
saturation = random.random()
value = random.random()
- return HSV(hue, saturation, value)
+ return color.HSV(hue, saturation, value)
def transition(start, end, step):
"""Return a vector equal to (end - start) * step + start."""
- return (end - start) * step + start
+ return (end - start) / abs(end - start) * step + start
def random_change():
@@ -92,19 +44,14 @@ def random_change():
return 1 / random.randint(min_time, max_time)
-def HSV_to_RGB(h):
- """Convert HSV to a 3-tuple of RGB."""
- return colorsys.hsv_to_rgb(h.h(), h.s(), h.v())
-
-
def demo(lights, rig):
"""Do some light things."""
light_status = [
{
'change': 0,
'light': light,
- 'current value': Vector(0, 0, 0),
- 'transitioning to': Vector(0, 0, 0),
+ 'current value': color.RGB(0, 0, 0),
+ 'transitioning to': color.RGB(0, 0, 0),
}
for light in lights
]
@@ -117,11 +64,10 @@ def demo(lights, rig):
if abs(transitioning_to - current_value) < change:
change = random_change()
light_s['change'] = change
- transitioning_to = pick_HSV()
+ transitioning_to = pick_HSV().to_RGB()
light_s['transitioning to'] = transitioning_to
new_color = transition(current_value, transitioning_to, change)
- rgb = HSV_to_RGB(new_color)
- light.setRGBRaw(*rgb)
+ light.setRGBRaw(*new_color.components)
light_s['current value'] = new_color
rig.updateOnce()
time.sleep(1 / FRAME_RATE)