diff options
| author | Raymond Hogenson <rayhogenson@openmailbox.org> | 2016-09-27 17:28:45 -0400 |
|---|---|---|
| committer | Raymond Hogenson <rayhogenson@openmailbox.org> | 2016-09-27 17:28:45 -0400 |
| commit | 0bf53f9ddd3aab57a82999d93955c05eedf620ce (patch) | |
| tree | 657c413568bda5928ec5a0954107f1e27614ccaa /bridge.py | |
| parent | Modify lights to select a random color (diff) | |
| download | bridge-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.py | 68 |
1 files changed, 7 insertions, 61 deletions
@@ -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) |
