here2share

# tk_Gradient_Radial_Scan_Visualizer.py

Jun 14th, 2025
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.81 KB | None | 0 0
  1. # tk_Gradient_Radial_Scan_Visualizer.py
  2.  
  3. import math
  4. import tkinter as tk
  5. from tkinter import Canvas
  6. import time
  7.  
  8. ww = 640
  9. hh = 640
  10.  
  11. root = tk.Tk()
  12. root.title("Gradient Radial Scan Visualizer")
  13. root.geometry(f"{ww}x{hh}+0+0")
  14.  
  15. cell_size = 40
  16. font_size = 10
  17. n = 10
  18. grid_size = 20 * cell_size
  19. squares = {}
  20. cell_order = []
  21. visited = set()
  22.  
  23. drag_start_x = 0
  24. drag_start_y = 0
  25.  
  26. canvas = tk.Canvas(root, width=ww, height=hh, bg="white")
  27. canvas.pack(fill=tk.BOTH, expand=True)
  28.  
  29. for x in range(-n, n):
  30.     for y in range(-n, n):
  31.         canvas_x = (x + n) * cell_size
  32.         canvas_y = (-y + n - 1) * cell_size
  33.         rect_id = canvas.create_rectangle(
  34.             canvas_x,
  35.             canvas_y,
  36.             canvas_x + cell_size,
  37.             canvas_y + cell_size,
  38.             outline="black",
  39.             fill="white",
  40.             tag="cells",
  41.         )
  42.         squares[(x, y)] = rect_id
  43.         text_x = canvas_x + cell_size // 2
  44.         text_y = canvas_y + cell_size // 2
  45.         canvas.create_text(
  46.             text_x,
  47.             text_y,
  48.             text=f"{x},{y}",
  49.             font=("Arial", font_size),
  50.             fill="black",
  51.         )
  52.  
  53. for angle_deg in range(90):
  54.     angle_rad = math.radians(angle_deg)
  55.     cos_val = math.cos(angle_rad)
  56.     sin_val = math.sin(angle_rad)
  57.     for r in range(n + 1):
  58.         x = int(r * cos_val)
  59.         y = int(r * sin_val)
  60.         if (x, y) in visited:
  61.             continue
  62.        
  63.         quadrants = [
  64.             (x, y),
  65.             (-y-1, x),
  66.             (-x-1, -y-1),
  67.             (y, -x-1)
  68.         ]
  69.        
  70.         for qx, qy in quadrants:
  71.             cell_order.append((qx, qy))
  72.             visited.add((qx, qy))
  73.  
  74. grid_colors = {
  75.     (0, 0): (255, 255, 255),
  76.     (0, 1): (255, 255, 0),
  77.     (0, 2): (0, 255, 0),
  78.     (1, 0): (255, 165, 0),
  79.     (1, 1): (128, 128, 128),
  80.     (1, 2): (0, 0, 255),
  81.     (2, 0): (255, 0, 0),
  82.     (2, 1): (128, 0, 128),
  83.     (2, 2): (0, 0, 0)
  84. }
  85.  
  86. def interpolate_color(x, y):
  87.     norm_x = (x + n) / (2 * n) * 2
  88.     norm_y = (y + n) / (2 * n) * 2
  89.     x0 = int(norm_x)
  90.     x1 = min(x0 + 1, 2)
  91.     y0 = int(norm_y)
  92.     y1 = min(y0 + 1, 2)
  93.     c00 = grid_colors.get((x0, y0), (255, 255, 255))
  94.     c10 = grid_colors.get((x1, y0), (255, 255, 255))
  95.     c01 = grid_colors.get((x0, y1), (255, 255, 255))
  96.     c11 = grid_colors.get((x1, y1), (255, 255, 255))
  97.     dx = norm_x - x0
  98.     dy = norm_y - y0
  99.     top = [c00[i] * (1 - dx) + c10[i] * dx for i in range(3)]
  100.     bottom = [c01[i] * (1 - dx) + c11[i] * dx for i in range(3)]
  101.     color = [top[i] * (1 - dy) + bottom[i] * dy for i in range(3)]
  102.     return f'#{int(color[0]):02x}{int(color[1]):02x}{int(color[2]):02x}'
  103.  
  104. interpolated_colors = {}
  105. for x in range(-n, n):
  106.     for y in range(-n, n):
  107.         interpolated_colors[(x, y)] = interpolate_color(x, y)
  108.  
  109. def detect_color(x, y):
  110.     return None
  111.  
  112. def process_pixels():
  113.     for x, y in cell_order:
  114.         if (x, y) in squares:
  115.             canvas.itemconfig(squares[(x, y)], fill=interpolated_colors[(x, y)])
  116.             time.sleep(0.01)
  117.             if detect_color(x, y):
  118.                 canvas.itemconfig(squares[(x, y)], fill="red")
  119.             canvas.update()
  120.  
  121. def start_drag(event):
  122.     global drag_start_x, drag_start_y
  123.     drag_start_x = event.x
  124.     drag_start_y = event.y
  125.     canvas.config(cursor="fleur")
  126.  
  127. def drag_canvas(event):
  128.     global drag_start_x, drag_start_y
  129.     dx = event.x - drag_start_x
  130.     dy = event.y - drag_start_y
  131.     canvas.move("all", dx, dy)
  132.     drag_start_x = event.x
  133.     drag_start_y = event.y
  134.  
  135. def stop_drag(event):
  136.     canvas.config(cursor="")
  137.  
  138. canvas.bind("<Button-1>", start_drag)
  139. canvas.bind("<B1-Motion>", drag_canvas)
  140. canvas.bind("<ButtonRelease-1>", stop_drag)
  141.  
  142. while True:
  143.     process_pixels()
  144.     canvas.itemconfig("cells", fill="white")
  145.  
  146. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment