here2share

# tk_FFT_Fractal.py

Jan 24th, 2026
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.09 KB | None | 0 0
  1. # tk_FFT_Fractal.py
  2.  
  3. import tkinter as tk
  4. from PIL import Image, ImageTk
  5. import math
  6.  
  7. W = 600
  8. H = 600
  9. root = tk.Tk()
  10. root.title("# tk_FFT_Fractal.py")
  11. root.geometry("+0+0")
  12. canvas = tk.Label(root)
  13. canvas.grid(row=0, column=0, columnspan=3)
  14.  
  15. gradient = Image.new('RGB', (3, 3))
  16. pixels = gradient.load()
  17. grid_colors = {
  18.     (0, 0): (255, 255, 255),  # White
  19.     (0, 1): (255, 255, 0),    # Yellow
  20.     (0, 2): (0, 255, 0),      # Green
  21.     (1, 0): (255, 165, 0),    # Orange
  22.     (1, 1): (128, 128, 128),  # Gray
  23.     (1, 2): (0, 0, 255),      # Blue
  24.     (2, 0): (255, 0, 0),      # Red
  25.     (2, 1): (128, 0, 128),    # Purple
  26.     (2, 2): (0, 0, 0)         # Black
  27. }
  28. for x in range(3):
  29.     for y in range(3):
  30.         pixels[x, y] = grid_colors[(x, y)]
  31. gradient = gradient.resize((W, H))
  32. color_cache = {}
  33. for x in range(W*2):
  34.     dx = x
  35.     for y in range(H*2):
  36.         dy = y
  37.         if x >= W:
  38.             x = 2*W - 1 - x
  39.         if y >= H:
  40.             y = 2*H - 1 - y
  41.         color_cache[(dx, dy)] = gradient.getpixel((x, y))
  42.  
  43. scale = 0.0025
  44.  
  45. freqs = [3.0, math.pi, math.pi/3]
  46. amplitudes = [1.1, 1.2, 1.3]
  47.  
  48. dbl = W*2
  49. def fft_fractal_iter(cx, cy):
  50.     x = cx
  51.     y = cy
  52.    
  53.     for i in range(len(amplitudes)):
  54.         x_new = x*x - y*y + cx * 0.5
  55.         y_new = 2*x*y + cy * 0.5
  56.        
  57.         x_new += math.sin(x * freqs[i % len(freqs)]) * amplitudes[i % len(amplitudes)]
  58.         y_new += math.cos(y * freqs[i % len(freqs)]) * amplitudes[i % len(amplitudes)]
  59.        
  60.         x = x_new
  61.         y = y_new
  62.    
  63.     color_x = int(abs(x * W))
  64.     color_y = int(abs(y * W))
  65.    
  66.     return color_cache[(color_x % dbl, color_y % dbl)]
  67.  
  68. img = Image.new("RGB", (W, H))
  69. def draw_frame():
  70.     p = img.load()
  71.     zoom = scale
  72.    
  73.     for py in range(H):
  74.         for px in range(W):
  75.             cx = (px - W/2) * zoom
  76.             cy = (py - H/2) * zoom
  77.            
  78.             color = fft_fractal_iter(cx, cy)
  79.             p[px, py] = color
  80.    
  81.     tkimg = ImageTk.PhotoImage(img)
  82.     canvas.configure(image=tkimg)
  83.     canvas.img = tkimg
  84.  
  85. draw_frame()
  86. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment