import math from pixel import Pixel FREQUENCY = 20.0 COLOR_A = (1.0, 0.5, 0.9) COLOR_B = (0.5, 0.1, 0.3) def distance(a: tuple, b: tuple) -> float: if len(a) != len(b): raise TypeError("Mismatching dimentional vector passed") dist = 0 for i in range(len(a)): d = b[i] - a[i] dist += d * d return dist ** 0.5 def sign(v: float) -> float: return 1.0 if v >= 0 else 0.0 def main(pixel: Pixel, resolution: tuple, frag_coord: tuple, time: float): # https://www.shadertoy.com/view/ldX3DN uv = tuple(-1.0 + 2.0 * x for x in (frag_coord[0] / resolution[0], frag_coord[1] / resolution[1])) homo_coords = (uv[0], 2.0 * frag_coord[1] / resolution[0]) moving_origin1 = (math.sin(time * 0.7), math.sin(time * 1.7)) moving_origin2 = (-math.cos(time * 2.0), -math.sin(time * 3.0)) wave_point1 = math.sin( distance(moving_origin1, homo_coords) * FREQUENCY ) wave_point2 = math.sin( distance(moving_origin2, homo_coords) * FREQUENCY ) black_or_white1 = sign(wave_point1) black_or_white2 = sign(wave_point2) composite = black_or_white1 * black_or_white2 col = tuple(max(COLOR_A[i] * composite, COLOR_B[i]) for i in range(3)) pixel.background_color.set( *col )