Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_Organic_Ripple_Cache.py
- import tkinter as tk
- import math
- import random
- from PIL import Image, ImageTk, ImageDraw, ImageFilter
- WIDTH, HEIGHT = 640, 480
- CENTER_X, CENTER_Y = WIDTH // 2, HEIGHT // 2
- root = tk.Tk()
- root.title("# tk_Organic_Ripple_Cache.py")
- canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="black")
- canvas.pack()
- img_label = canvas.create_image(0, 0, anchor=tk.NW)
- img = Image.new('RGB', (WIDTH, HEIGHT), (0, 0, 64))
- particles = []
- num_ripples = 6
- points_per_ripple = 50
- for ripple_idx in range(num_ripples):
- start_dist = ripple_idx * 70
- for i in range(points_per_ripple):
- angle = (i / points_per_ripple) * 2 * math.pi
- angle_offset = random.uniform(-0.05, 0.05)
- particles.append({
- 'angle': angle + angle_offset,
- 'dist': start_dist,
- 'speed': 1.8,
- 'ripple_idx': ripple_idx,
- 'dx': random.uniform(-5, 5),
- 'dy': random.uniform(-5, 5)
- })
- t = 0
- intensity = 0.9
- while True:
- img.paste((0, 0, 64), [0, 0, WIDTH, HEIGHT])
- t += 0.05
- draw = ImageDraw.Draw(img)
- for p in particles:
- p['dist'] += p['speed']
- if p['dist'] > 425:
- p['dist'] = 0
- p['dx'] = random.uniform(-12, 12)
- p['dy'] = random.uniform(-12, 12)
- wobble = math.sin(t * 5 + p['angle'] * 5) * 4.2
- x = CENTER_X + math.cos(p['angle']) * (p['dist'] + wobble) + p['dx']
- y = CENTER_Y + math.sin(p['angle']) * (p['dist'] + wobble) + p['dy']
- wave = math.sin(p['dist'] * 0.2 - t * 2) * 0.3 + 0.7
- size = 9
- draw.ellipse([x - size, y - size, x + size, y + size],
- fill=(210, 210, 210))
- blurred_img = img.filter(ImageFilter.GaussianBlur(radius=10))
- photo = ImageTk.PhotoImage(blurred_img)
- canvas.itemconfig(img_label, image=photo)
- root.update_idletasks()
- root.update()
Advertisement
Add Comment
Please, Sign In to add comment