From 963d68196ec757ecd6246954acffb782a1e8e1fe Mon Sep 17 00:00:00 2001 From: Aaron Fenyes Date: Sat, 28 Sep 2019 22:43:13 +0200 Subject: [PATCH] Add thresholding to reduce light update frequency It's not very effective, and Glen says things look fine without, so I'll abandon this branch for now. --- interactions.py | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/interactions.py b/interactions.py index f9cab9c..cc5d9d8 100644 --- a/interactions.py +++ b/interactions.py @@ -55,8 +55,8 @@ clock = pygame.time.Clock() # --- copied from firestar.py -b = phue.Bridge('172.18.130.12') -##b = None +##b = phue.Bridge('172.18.130.12') +b = None Nedges = 30; edgecode = [None] * Nedges; @@ -72,7 +72,9 @@ lasthue = 65535 fullbright = 254 fullsat = 254 -# --- control methods +# --- control methods and diagnostics + +updates = 0 def set_light_hsv(e, color, hit_bridge): command = { @@ -80,8 +82,11 @@ def set_light_hsv(e, color, hit_bridge): 'bri' : color[2]*fullbright, 'sat' : color[1]*fullsat } - if hit_bridge and b != None: - b.set_light(edges[e].light_id, command) + if hit_bridge: + if b != None: + b.set_light(edges[e].light_id, command) + global updates + updates += 1 rgb_color = tuple(255*c for c in colorsys.hsv_to_rgb(*color)) pygame.draw.aaline(screen, rgb_color, vertices[vertex_adj[e][0]], vertices[vertex_adj[e][1]]) @@ -101,7 +106,7 @@ drain_rate = 0.1 charge = 12*[0] current = 30*[0] -last_litness = 30*[float("inf")] +litness = 30*[float("inf")] change_threshold = 0.05 # === main loop === @@ -129,22 +134,33 @@ def wave_evolution(): charge[v] *= 1 - drain_rate def set_wave_light(e, i): - litness = 1 - exp(-2*i*i) - hit_bridge = abs(litness - last_litness[e]) > change_threshold - set_light_hsv(e, (0.45 + litness*0.25, 1 - 0.5*litness*litness, litness), hit_bridge) - if hit_bridge: - last_litness[e] = litness + new_litness = 1 - exp(-2*i*i) + if abs(new_litness - litness[e]) > change_threshold: + hit_bridge = True + litness[e] = new_litness + else: + hit_bridge = False + set_light_hsv(e, (0.45 + litness[e]*0.25, 1 - 0.5*litness[e]*litness[e], litness[e]), hit_bridge) def show_data(screen): + # light updates + text = font.render('updates', True, (255, 255, 255)) + screen.blit(text, (20, viewsize)) + text = font.render(str(updates), True, (255, 255, 255)) + screen.blit(text, (120, viewsize)) + + # energy energy = 0.5*(sum(q*q for q in charge) + inductance*sum(i*i for i in current)) text = font.render('energy', True, (255, 255, 255)) - screen.blit(text, (20, viewsize)) - text = font.render(str(energy), True, (255, 255, 255)) - screen.blit(text, (120, viewsize)) - text = font.render('charge[0]', True, (255, 255, 255)) screen.blit(text, (20, 30 + viewsize)) - text = font.render(str(charge[0]), True, (255, 255, 255)) + text = font.render(str(energy), True, (255, 255, 255)) screen.blit(text, (120, 30 + viewsize)) + + # charge[0] + text = font.render('charge[0]', True, (255, 255, 255)) + screen.blit(text, (20, 60 + viewsize)) + text = font.render(str(charge[0]), True, (255, 255, 255)) + screen.blit(text, (120, 60 + viewsize)) if __name__ == '__main__': # set up background