Redefine positions as Point objects

This commit is contained in:
Ian Jauslin 2021-09-28 10:40:49 -04:00
parent bbdbf3bef9
commit b8a3e44f7c

68
main.py
View File

@ -42,7 +42,7 @@ class Cross_painter(Widget):
# create new cross
if touch.button=="right":
if self.check_add((touch.x,touch.y)):
new=Cross((touch.x,touch.y))
new=Cross(touch.x,touch.y)
with self.canvas:
new.draw()
# add to list
@ -66,7 +66,7 @@ class Cross_painter(Widget):
# only move on left click
if touch.button=="left" and self.selected!=None:
#self.selected.pos=self.check_move((touch.x,touch.y),self.selected)
self.selected.pos=(touch.x,touch.y)
self.selected.setpos(touch.x,touch.y)
# redraw
self.canvas.clear()
self.draw()
@ -95,17 +95,13 @@ class Cross_painter(Widget):
return False
return True
# check whether a cross at pos interacts with cross
def check_interaction(self,pos,cross):
return int((pos[0]-cross.pos[0])/cross.size)**2+int((pos[1]-cross.pos[1])/cross.size)**2>=5
# cross
class Cross():
# size of central square
size=50
def __init__(self,pos,**kwargs):
self.pos=pos
def __init__(self,x,y,**kwargs):
self.pos=Point(x,y)
self.color=kwargs.get("color",(0,0,1))
self.selected=False
@ -116,33 +112,55 @@ class Cross():
#else:
# Color(1,0,0)
Color(*(self.color))
Rectangle(pos=(self.pos[0]-self.size*1.5,self.pos[1]-self.size*0.5),size=(3*self.size,self.size))
Rectangle(pos=(self.pos[0]-self.size*0.5,self.pos[1]-self.size*1.5),size=(self.size,3*self.size))
Rectangle(pos=(self.pos.x-self.size*1.5,self.pos.y-self.size*0.5),size=(3*self.size,self.size))
Rectangle(pos=(self.pos.x-self.size*0.5,self.pos.y-self.size*1.5),size=(self.size,3*self.size))
# stroke
Color(1,1,1)
Line(points=(
*(self.pos[0]-self.size*0.5,self.pos[1]-self.size*0.5),
*(self.pos[0]-self.size*0.5,self.pos[1]-self.size*1.5),
*(self.pos[0]+self.size*0.5,self.pos[1]-self.size*1.5),
*(self.pos[0]+self.size*0.5,self.pos[1]-self.size*0.5),
*(self.pos[0]+self.size*1.5,self.pos[1]-self.size*0.5),
*(self.pos[0]+self.size*1.5,self.pos[1]+self.size*0.5),
*(self.pos[0]+self.size*0.5,self.pos[1]+self.size*0.5),
*(self.pos[0]+self.size*0.5,self.pos[1]+self.size*1.5),
*(self.pos[0]-self.size*0.5,self.pos[1]+self.size*1.5),
*(self.pos[0]-self.size*0.5,self.pos[1]+self.size*0.5),
*(self.pos[0]-self.size*1.5,self.pos[1]+self.size*0.5),
*(self.pos[0]-self.size*1.5,self.pos[1]-self.size*0.5),
*(self.pos[0]-self.size*0.5,self.pos[1]-self.size*0.5),
*(self.pos.x-self.size*0.5,self.pos.y-self.size*0.5),
*(self.pos.x-self.size*0.5,self.pos.y-self.size*1.5),
*(self.pos.x+self.size*0.5,self.pos.y-self.size*1.5),
*(self.pos.x+self.size*0.5,self.pos.y-self.size*0.5),
*(self.pos.x+self.size*1.5,self.pos.y-self.size*0.5),
*(self.pos.x+self.size*1.5,self.pos.y+self.size*0.5),
*(self.pos.x+self.size*0.5,self.pos.y+self.size*0.5),
*(self.pos.x+self.size*0.5,self.pos.y+self.size*1.5),
*(self.pos.x-self.size*0.5,self.pos.y+self.size*1.5),
*(self.pos.x-self.size*0.5,self.pos.y+self.size*0.5),
*(self.pos.x-self.size*1.5,self.pos.y+self.size*0.5),
*(self.pos.x-self.size*1.5,self.pos.y-self.size*0.5),
*(self.pos.x-self.size*0.5,self.pos.y-self.size*0.5),
))
# check whether a cross at pos interacts with cross
def check_interaction(self,pos):
return int((pos.x-self.pos.x)/self.size)**2+int((pos.y-self.pos.y)/self.size)**2>=5
# find position along a line that comes in contact with the line
#def move_on_line_to_stick(self,x,v):
class Point:
def __init__(self,x,y):
self.x=x
self.y=y
def __add__(self,point):
return Point(self.x+point.x,self.y+point.y)
def __neg__(self):
return Point(-self.x,self.y)
def setpos(self,x,y):
self.x=x
self.y=y
# L_infinity distance rescalled by 3 in the x direction
def cross_distx(x,y):
return max(abs(x[0]-y[0])/3,abs(x[1]-y[1]))
return max(abs(x.x-y.x)/3,abs(x.y-y.y))
# L_infinity distance rescalled by 3 in the y direction
def cross_disty(x,y):
return max(abs(x[0]-y[0]),abs(x[1]-y[1])/3)
return max(abs(x.x-y.x),abs(x.y-y.y)/3)
# polar description of touching cross
def cross_polar(t):