here2share

# tk_blackhole.py

Sep 15th, 2021 (edited)
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.83 KB | None | 0 0
  1. # tk_blackhole.py
  2.  
  3. from tkinter import *
  4. import math
  5. import os
  6. import time
  7. import random
  8.  
  9. class particule:
  10.     def __init__(self,):
  11.         self.x=0
  12.         self.y=0
  13.         self.f=(0,0)
  14.         self.a=(0,0)
  15.         self.m=1.
  16.         self.cv=None
  17.  
  18.     def gen(self,width, height,zmin,zmax,amin,amax,mmin,mmax):
  19.         self.x=random.randint(0,width)
  20.         self.y =random.randint(0,height)
  21.         self.f=(random.uniform(-zmax,zmax), random.uniform(-zmax,zmax))
  22.         self.a = (random.uniform(amin,amax), random.uniform(amin,amax))
  23.         self.m=random.uniform(mmin,mmax)
  24.         self.color= '#%02x%02x%02x' % (random.randint(0,255),random.randint(0,255),random.randint(0,255))
  25.  
  26. class MyApp(Tk):
  27.     def __init__(self):
  28.         self.nbi=0
  29.         Tk.__init__(self)
  30.         fr = Frame(self)
  31.         fr.pack()
  32.         self.canvas = Canvas(fr, height = 720, width = 1280,bg= 'gray10')
  33.         self.canvas.pack()
  34.         nb_particules = 100
  35.         self.zmin=1.
  36.         self.zmax=1.
  37.         self.amin=0.
  38.         self.amax=0.
  39.         self.mmin=5
  40.         self.mmax=10
  41.         self.size=3.
  42.         self.A = (self.canvas.winfo_reqwidth()/2,self.canvas.winfo_reqheight()/2)
  43.         self.M=50
  44.         self.particules = list(range(nb_particules))
  45.  
  46.         for idx, p_ in enumerate(self.particules):
  47.             self.particules[idx]=particule()
  48.  
  49.             self.particules[idx].gen(self.canvas.winfo_reqwidth(), self.canvas.winfo_reqheight(),self.zmin,self.zmax,self.amin,self.amax,self.mmin,self.mmax)
  50.  
  51.             self.particules[idx].cv =self.canvas.create_oval(self.particules[idx].x-self.particules[idx].m, self.particules[idx].y-self.particules[idx].m, self.particules[idx].x+self.particules[idx].m, self.particules[idx].y+self.particules[idx].m)
  52.  
  53.             self.canvas.itemconfig(self.particules[idx].cv, fill=self.particules[idx].color) # change color
  54.         self.update_drops()
  55.  
  56.         self.canvas.bind("<Button-1>", self.click )
  57.         return
  58.  
  59.     def click(self, event):
  60.         self.A=(event.x, event.y)
  61.  
  62.     def update_drops(self ):
  63.         for idx, p_ in enumerate(self.particules):
  64.             dx= (self.A[0] - self.particules[idx].x)
  65.             dy= (self.A[1] -self.particules[idx].y)
  66.             if abs(dx<10):
  67.                 dx= dx-20
  68.             if abs(dy<10):
  69.                 dy= dy-20
  70.             d = ((dx)**2 + (dy)**2)**0.5
  71.             f = (self.M * self.particules[idx].m) / (d**2) *1.
  72.             dx/=d
  73.             dy/=d
  74.             sp=3
  75.             dx,dy = [min(sp,max(-sp,f*xy)) for xy in (dx,dy)]
  76.             self.particules[idx].a=(dx,dy)
  77.  
  78.             self.particules[idx].f=(self.particules[idx].f[0]+self.particules[idx].a[0],self.particules[idx].f[1]+self.particules[idx].a[1])
  79.  
  80.             self.particules[idx].x += self.particules[idx].f[0]
  81.  
  82.             self.particules[idx].y += self.particules[idx].f[1]
  83.  
  84.             self.canvas.coords(self.particules[idx].cv,self.particules[idx].x-self.particules[idx].m, self.particules[idx].y-self.particules[idx].m, self.particules[idx].x+self.particules[idx].m, self.particules[idx].y+self.particules[idx].m)
  85.  
  86.         self.canvas.update()
  87.         return
  88.  
  89. if __name__ == "__main__":
  90.     root = MyApp()
  91.     root.title("# tk blackhole")
  92.     i=0
  93.     while 1:
  94.         root.update_drops()
Add Comment
Please, Sign In to add comment