Changeset - 046759436f6e
[Not reviewed]
default
0 1 0
Laman - 6 years ago 2019-01-14 17:17:46

immutable EPoint
1 file changed with 27 insertions and 46 deletions:
0 comments (0 inline, 0 general)
src/analyzer/epoint.py
Show inline comments
 
@@ -4,8 +4,14 @@
 
## Euclidean 2D plane point: (x,y).
 
class EPoint:
 
	def __init__(self,x,y):
 
		self.x=x
 
		self.y=y
 
		self._x=x
 
		self._y=y
 

	
 
	@property
 
	def x(self): return self._x
 
	
 
	@property
 
	def y(self): return self._y
 

	
 
	@staticmethod
 
	def fromProjective(point):
 
@@ -13,71 +19,46 @@ class EPoint:
 
		return EPoint(point.item(1)/point.item(0),point.item(2)/point.item(0))
 

	
 
	def toProjective(self):
 
		return (1,self.x,self.y)
 
		return (1,self._x,self._y)
 

	
 
	def dist(self,a):
 
		return math.sqrt((self.x-a.x)**2+(self.y-a.y)**2)
 
		return math.sqrt((self._x-a._x)**2+(self._y-a._y)**2)
 

	
 
	def __add__(self,a):
 
		return EPoint(self.x+a.x,self.y+a.y)
 
		return EPoint(self._x+a._x,self._y+a._y)
 

	
 
	def __sub__(self,a):
 
		return EPoint(self.x-a.x,self.y-a.y)
 
		return EPoint(self._x-a._x,self._y-a._y)
 

	
 
	def __mul__(self,k):
 
		return EPoint(self.x*k,self.y*k)
 
		return EPoint(self._x*k,self._y*k)
 

	
 
	def __rmul__(self,k):
 
		return self*k
 

	
 
	def __truediv__(self,k):
 
		return EPoint(self.x/k,self.y/k)
 
		return EPoint(self._x/k,self._y/k)
 

	
 
	def __floordiv__(self,k):
 
		return EPoint(self.x//k,self.y//k)
 

	
 
	def __iadd__(self,a):
 
		self.x+=a.x
 
		self.y+=a.y
 
		return self
 

	
 
	def __isub__(self,a):
 
		self.x-=a.x
 
		self.y-=a.y
 
		return self
 

	
 
	def __imul__(self,k):
 
		self.x*=k
 
		self.y*=k
 
		return self
 

	
 
	def __itruediv__(self,k):
 
		self.x/=k
 
		self.y/=k
 
		return self
 

	
 
	def __ifloordiv__(self,k):
 
		self.x//=k
 
		self.y//=k
 
		return self
 
		return EPoint(self._x//k,self._y//k)
 

	
 
	def __neg__(self):
 
		return EPoint(-self.x,-self.y)
 
		return EPoint(-self._x,-self._y)
 

	
 
	def __getitem__(self,key):
 
		if key==0: return self.x
 
		elif key==1: return self.y
 
		if key==0: return self._x
 
		elif key==1: return self._y
 
		raise IndexError(key)
 

	
 
	def __hash__(self):
 
		return hash((self.x,self.y))
 
		return hash((self._x,self._y))
 

	
 
	def __lt__(self,a): return self.x<a.x or (self.x==a.x and self.y<a.y)
 
	def __le__(self,a): return self.x<a.x or (self.x==a.x and self.y<=a.y)
 
	def __gt__(self,a): return self.x>a.x or (self.x==a.x and self.y>a.y)
 
	def __ge__(self,a): return self.x>a.x or (self.x==a.x and self.y>=a.y)
 
	def __eq__(self,a): return self.x==a.x and self.y==a.y
 
	def __ne__(self,a): return self.x!=a.x or self.y!=a.y
 
	def __lt__(self,a): return self._x<a._x or (self._x==a._x and self._y<a._y)
 
	def __le__(self,a): return self._x<a._x or (self._x==a._x and self._y<=a._y)
 
	def __gt__(self,a): return self._x>a._x or (self._x==a._x and self._y>a._y)
 
	def __ge__(self,a): return self._x>a._x or (self._x==a._x and self._y>=a._y)
 
	def __eq__(self,a): return self._x==a._x and self._y==a._y
 
	def __ne__(self,a): return self._x!=a._x or self._y!=a._y
 

	
 
	def __str__(self): return "({0},{1})".format(round(self.x,3),round(self.y,3))
 
	def __repr__(self): return "EPoint({0},{1})".format(round(self.x,3),round(self.y,3))
 
	def __str__(self): return "({0},{1})".format(round(self._x,3),round(self._y,3))
 
	def __repr__(self): return "EPoint({0},{1})".format(round(self._x,3),round(self._y,3))
0 comments (0 inline, 0 general)