diff --git a/waves.py b/waves.py index d39e20f..26e7966 100755 --- a/waves.py +++ b/waves.py @@ -2,38 +2,47 @@ import cairo import math +import datetime +import calendar +import random from utils import random_color # dimensions of the output image WIDTH, HEIGHT = 1920, 1080 -# numbers of waves -WAVES = 12 # how much should the phases be offset? -WAVE_OFFSET = 0 - (math.pi/4)#-1.9 +WAVE_OFFSET = math.pi / random.choice([1, 2, 4]) #-1.9 # amplitude of the sine wave -AMPLITUDE = 50 +#AMPLITUDE = 9 # only 1 color with shades? MONOCHROME = True # works only if monochrome is set - uses todays date as base for the color DATE_BASED_COLOR = True +DATE_BASED_AMPLITUDE = True +DATE_BASED_COUNT = True # background black? White otherwise: DARK_BG = True # precision of the calculation PRECISION = 10000 -def todays_color(): - import datetime +def days_color(date): import colorsys - import calendar # a day between 1 and 365 (inclusive) - today = datetime.datetime.now().timetuple().tm_yday - year = datetime.datetime.now().year + today = date.timetuple().tm_yday + year = date.year days_in_year = 365 + calendar.isleap(year) # between 0 and 1, how far through the year are we? progress = today/days_in_year return colorsys.hsv_to_rgb(progress, 1, 1) - + +def days_amp(date, waves): + day = date.day + days_in_month = calendar.monthrange(date.year, date.month)[1] + max_amp = 1/waves/2 + return day/days_in_month * max_amp + +def days_count(date): + return date.month def main(): @@ -42,10 +51,20 @@ def main(): ctx.scale(WIDTH, HEIGHT) # Normalizing the canvas - wave_height = 1/WAVES step_size = 1/PRECISION - lastpoints = [(x/PRECISION, 0) for x in range(PRECISION+1)] + + #date = datetime.datetime.strptime('2021-01-01', '%Y-%m-%d') + date = datetime.datetime.today() + frequency = random.randint(10, 40) + if DATE_BASED_COUNT: + waves = days_count(date) + else: + waves = 12 + if DATE_BASED_AMPLITUDE: + amplitude = days_amp(date, waves) + else: + amplitude = 25 if DARK_BG: # make bg black ctx.rectangle(0, 0, 1, 1) @@ -53,17 +72,21 @@ def main(): ctx.fill() if MONOCHROME: - r, g, b = random_color() - alpha_step = 1/WAVES + if DATE_BASED_COLOR: + r, g, b = days_color(date) #datetime.datetime.now()) + else: + r, g, b = random_color() + alpha_step = 1/waves - for num in range(WAVES+1): + wave_height = 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*AMPLITUDE + (num * WAVE_OFFSET) ) * 0.1 - points.append((x, ( (y/4) + ((0.5+num)*wave_height)))) + y = amplitude * math.sin(frequency * x + (num * WAVE_OFFSET) ) + points.append((x, ( (y) + ((0.5+num)*wave_height)))) x += step_size print(f'Draw {len(points)} points for curve {num}') if not MONOCHROME: