boris-vlasenko

Координаты пересечения двух прямоугольников

Dec 13th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.92 KB | None | 0 0
  1.  
  2. from tkinter import *
  3. from random import randrange as rnd, choice
  4.  
  5. root = Tk()
  6. root.geometry('600x600')
  7. canv = Canvas(bg='white')
  8. canv.pack(fill=BOTH,expand=1)
  9. colors = ('green','red','orange','blue')
  10.  
  11.  
  12. class Rectangle():
  13.     def __init__(self,x,y,w,h):
  14.         self.x1 = x
  15.         self.y1 = y
  16.         self.w = w
  17.         self.h = h
  18.         self.x2 = self.x1+w
  19.         self.y2 = self.y1+h
  20.         self.img = canv.create_rectangle(self.x1,self.y1,self.x2,self.y2)
  21.         self.color = ''
  22.        
  23.     def intersection(self,other):
  24.         inter = rectanglesintersection(self,other)
  25.         if inter:
  26.             try:
  27.                 x1,x2 = inter[0]
  28.                 y1,y2 = inter[1]
  29.                 canv.create_rectangle(x1,y1,x2,y2,fill='orange',tag='temp')
  30.                 return inter
  31.             except:
  32.                 return None
  33.            
  34.    
  35.     def move(self,x,y):
  36.         self.x1 = x
  37.         self.y1 = y
  38.         self.x2 = x+self.w
  39.         self.y2 = y+self.h
  40.         canv.coords(self.img,self.x1,self.y1,self.x2,self.y2)
  41.         canv.itemconfig(self.img,fill=self.color)
  42.        
  43. def pointinline(x,x1,x2):
  44.     return x1 < x < x2
  45.    
  46. def linesintersection(x1,x2,xx1,xx2):
  47.     res = []
  48.     if pointinline(x1,xx1-1,xx2+1):
  49.         res.append(x1)
  50.     if pointinline(x2,xx1-1,xx2+1):
  51.         res.append(x2)
  52.     if pointinline(xx1,x1,x2):
  53.         res.append(xx1)
  54.     if pointinline(xx2,x1,x2):
  55.         res.append(xx2)
  56.     return res
  57.    
  58. def rectanglesintersection(r1,r2):
  59.     res_x = linesintersection(r1.x1,r1.x2,r2.x1,r2.x2)
  60.     res_y = linesintersection(r1.y1,r1.y2,r2.y1,r2.y2)
  61.     if res_x and res_y:
  62.         return res_x, res_y
  63.    
  64. r1 = Rectangle(300,300,130,80)
  65. r2 = Rectangle(200,200,80,100)
  66.  
  67.  
  68. def mouse_move(event):
  69.     canv.delete('temp')
  70.  
  71.     r2.move(event.x,event.y)
  72.     print(r2.intersection(r1))
  73.  
  74.  
  75. root.bind('<Motion>',mouse_move)
  76.        
  77. mainloop()
Add Comment
Please, Sign In to add comment