diff --git a/src/analyzer/epoint.py b/src/analyzer/epoint.py --- a/src/analyzer/epoint.py +++ b/src/analyzer/epoint.py @@ -1,8 +1,10 @@ import math +import numpy as np + def homogenize(v): - for k in v: + for k in reversed(v): if k!=0: return v/k return v @@ -21,8 +23,8 @@ class EPoint: @staticmethod def fromProjective(point): - if point.item(0)==0: return None - return EPoint(point.item(1)/point.item(0),point.item(2)/point.item(0)) + if point.item(2)==0: return None + return EPoint(point.item(0)/point.item(2),point.item(1)/point.item(2)) @staticmethod def fromPolar(point,center): @@ -32,7 +34,7 @@ class EPoint: return length*EPoint(x,y)+center def toProjective(self): - return (1,self._x,self._y) + return (self._x,self._y,1) def toPolar(self,center): v=self-center @@ -41,6 +43,10 @@ class EPoint: k=self.dist(center) return (alpha,k) + def transform(self,matrix): + transformed=np.matmul(matrix,np.array(self.toProjective()).transpose()) + return EPoint.fromProjective(transformed) + def dist(self,a): return math.sqrt((self._x-a._x)**2+(self._y-a._y)**2)