Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_ripple.py
- import tkinter as tk
- import math
- from PIL import Image, ImageTk
- WIDTH, HEIGHT = 640, 480
- CENTER_X, CENTER_Y = WIDTH // 2, HEIGHT // 2
- root = tk.Tk()
- root.title("tk_ripple.py")
- canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="black")
- canvas.pack()
- pil_img = Image.new("RGB", (WIDTH, HEIGHT))
- img_label = canvas.create_image(0, 0, anchor=tk.NW)
- t = 0
- dist_map = []
- angle_map = []
- for y in range(HEIGHT):
- dist_row = []
- angle_row = []
- for x in range(WIDTH):
- dx = x - CENTER_X
- dy = y - CENTER_Y
- dist_row.append(math.sqrt(dx*dx + dy*dy))
- angle_row.append(math.atan2(dy, dx))
- dist_map.append(dist_row)
- angle_map.append(angle_row)
- while True:
- pixel_data = []
- cos_t3 = math.cos(t * 0.3)
- sin_t3 = math.sin(t * 0.3)
- sin_t4 = math.sin(t * 0.4)
- cos_t4 = math.cos(t * 0.4)
- offset2_x = 100 * cos_t3
- offset2_y = 100 * sin_t3
- offset3_x = 80 * sin_t4
- offset3_y = 80 * cos_t4
- for y in range(HEIGHT):
- for x in range(WIDTH):
- dx = x - CENTER_X
- dy = y - CENTER_Y
- dist = dist_map[y][x]
- wave1 = math.sin(dist * 0.05 - t * 2)
- dx2 = dx - offset2_x
- dy2 = dy - offset2_y
- dist2 = math.sqrt(dx2*dx2 + dy2*dy2)
- wave2 = math.sin(dist2 * 0.07 - t * 1.5)
- dx3 = dx + offset3_x
- dy3 = dy + offset3_y
- dist3 = math.sqrt(dx3*dx3 + dy3*dy3)
- wave3 = math.sin(dist3 * 0.06 - t * 1.8)
- combined = (wave1 + wave2 * 0.7 + wave3 * 0.5) / 2.2
- angle = angle_map[y][x]
- angular = math.sin(angle * 3 + t) * 0.15
- combined += angular
- intensity = (combined + 1) / 2
- intensity = max(0, min(1, intensity))
- if intensity < 0.3:
- r = int(intensity * 40)
- g = int(intensity * 80)
- b = int(100 + intensity * 100)
- elif intensity < 0.7:
- t_local = (intensity - 0.3) / 0.4
- r = int(40 + t_local * 60)
- g = int(80 + t_local * 140)
- b = int(150 + t_local * 80)
- else:
- t_local = (intensity - 0.7) / 0.3
- r = int(100 + t_local * 155)
- g = int(220 + t_local * 35)
- b = int(230 + t_local * 25)
- pixel_data.append((r, g, b))
- pil_img.putdata(pixel_data)
- photo = ImageTk.PhotoImage(pil_img)
- canvas.itemconfig(img_label, image=photo)
- t += 0.05
- root.update()
Advertisement
Add Comment
Please, Sign In to add comment