diff --git a/waves.py b/waves.py index a630dc8..19fed0c 100755 --- a/waves.py +++ b/waves.py @@ -4,9 +4,19 @@ import cairo import math from utils import random_color -WIDTH, HEIGHT = 256, 256 -WAVES = 8 +# dimensions of the output image +WIDTH, HEIGHT = 1024, 1024 +# numbers of waves +WAVES = 10 +# how much should the phases be offset? +WAVE_OFFSET = -0.7 +# amplitude of the sine wave +AMPLITUDE = 25 +# only 1 color with shades? +MONOCHROME = True +# background black? White otherwise: +DARK_BG = True def main(): @@ -17,21 +27,34 @@ def main(): wave_height = 1/WAVES lastpoints = [(x/1000, 0) for x in range(1000)] + if DARK_BG: + # make bg black + ctx.rectangle(0, 0, 1, 1) + ctx.set_source_rgb(0, 0, 0) + ctx.fill() - for num in range(WAVES): + if MONOCHROME: r, g, b = random_color() + alpha_step = 1/WAVES + + for num in range(WAVES+1): + if not MONOCHROME: + r, g, b = random_color() points = [] x = 0 while x < 1: - y = math.sin(x*50) * 0.1 + y = math.sin(x*AMPLITUDE + (num * WAVE_OFFSET) ) * 0.1 points.append((x, ( (y/4) + ((0.5+num)*wave_height)))) x += 0.001 + if not MONOCHROME: + ctx.set_source_rgb(r, g, b) + else: + ctx.set_source_rgba(r, g, b, 1 - (alpha_step * num)) # make more transparent toward bottom # draw waves ctx.move_to(*points[0]) for p in points[1:]: ctx.line_to(*p) ctx.set_line_width(0.002) - ctx.set_source_rgb(r, g, b) ctx.stroke() # fill area above for pos in range(len(points)):