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.
This commit is contained in:
Aaron Fenyes 2019-09-28 22:43:13 +02:00
parent add9bda080
commit 963d68196e

View File

@ -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:
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,23 +134,34 @@ 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
background = pygame.Surface(screen.get_size()).convert()