# HG changeset patch # User Laman # Date 2019-01-14 17:17:46 # Node ID 046759436f6e5b08b1ca8cd10cbf028a89c3e063 # Parent 90d22d070710e86269d3a40c9ced9a440f30b1a4 immutable EPoint diff --git a/src/analyzer/epoint.py b/src/analyzer/epoint.py --- a/src/analyzer/epoint.py +++ b/src/analyzer/epoint.py @@ -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.xa.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._xa._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))