diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -1,1 +1,2 @@ -^images/ \ No newline at end of file +^images/ +^__pycache__/ \ No newline at end of file diff --git a/grid.py b/src/grid.py rename from grid.py rename to src/grid.py --- a/grid.py +++ b/src/grid.py @@ -1,2 +1,74 @@ -class Grid: - pass \ No newline at end of file +import numpy + +## Multiplicates the vector as to set the first nonzero coordinate to 1. +def canonize(v): + if v.item(0)!=0: factor=v.item(0) + elif v.item(1)!=0: factor=v.item(1) + elif v.item(2)!=0: factor=v.item(2) + else: factor=1 + return v/factor + return [x/factor for x in v] + +def transformPoint(point,A): + # print('#68',numpy.asarray(([1]+point)*A)) + x=canonize((A*numpy.matrix([1]+point).transpose()).getA1()) + return x[1:] + +class Grid: + + def __init__(self,corners): + # ab + # cd + a,b,c,d=corners + + p1=numpy.cross(a,b) + p2=numpy.cross(c,d) + vanish1=numpy.cross(p1,p2) + + print('#16',p1,p2,vanish1) + + p3=numpy.cross(a,c) + p4=numpy.cross(b,d) + vanish2=numpy.cross(p3,p4) + + print('#32',p3,p4,vanish2) + + horizon=canonize(numpy.cross(vanish1,vanish2)) + + # horizon.x+=10 + # horizon[1]+=10 + + print('#48',horizon) + + rectiMatrix=numpy.matrix([horizon,[0,1,0],[0,0,1]]) + rectiMatrixInv=numpy.linalg.inv(rectiMatrix) + + print('#64',rectiMatrixInv) + print('#72',transformPoint([0,0],rectiMatrixInv)) + + self.intersections=[[[c,r] for c in range(3)] for r in range(3)] + self.intersections=[[transformPoint(point,rectiMatrixInv) for point in line] for line in self.intersections] + + + # b1=canonize(numpy.cross(horizon,p1)) + # b2=canonize(numpy.cross(horizon,p2)) + # b3=canonize(numpy.cross(horizon,p3)) + # b4=canonize(numpy.cross(horizon,p4)) + + # print('#64',b1,b2,b3,b4) + + # self.intersections=[] + # boardSize=4 + # for r in range(boardSize): + # self.intersections.append([None]*boardSize) + # rowLine=numpy.cross(((b1*r+b2*(boardSize-1-r)) / (boardSize-1)), vanish1) + # print('#80',rowLine) + # for c in range(boardSize): + # colLine=numpy.cross(((b3*c+b4*(boardSize-1-c)) / (boardSize-1)), vanish2) + # print('#88',colLine) + # self.intersections[r][c]=numpy.cross(rowLine,colLine) + +# x=Grid([Vector3(1,0,10),Vector3(1,10,10),Vector3(1,0,0),Vector3(1,10,0)]) +x=Grid([[1,0,10],[1,7,7],[1,0,0],[1,10,0]]) +for line in x.intersections: + print('#96',line) diff --git a/gui.py b/src/gui.py rename from gui.py rename to src/gui.py --- a/gui.py +++ b/src/gui.py @@ -27,7 +27,7 @@ class Application(tk.Frame): self.canvas=tk.Canvas(self) self.canvas.configure(width=480,height=360,background="#ff4444") - imgOrig=PIL.Image.open("images/1.jpg") + imgOrig=PIL.Image.open("../images/1.jpg") self.img=ImageTk.PhotoImage(imgOrig.resize((int(self.canvas['width']),int(self.canvas['height'])),resample=PIL.Image.BILINEAR)) self.canvas.bind('<1>',lambda e: self.addCorner(e.x,e.y)) @@ -60,6 +60,7 @@ class Application(tk.Frame): index,minDist=i,a.dist(c) self.corners[index]=a + print(self.corners) def redrawGrid(self): pass diff --git a/vector3.py b/src/vector3.py rename from vector3.py rename to src/vector3.py --- a/vector3.py +++ b/src/vector3.py @@ -67,14 +67,21 @@ class Vector3: return Vector3(self.y*v.z-self.z*v.y, self.z*v.x-self.x*v.z, self.x*v.y-self.y*v.x) def __ixor__(self,v): - self.x=self.y*v.z-self.z*v.y - self.y=self.z*v.x-self.x*v.z - self.z=self.x*v.y-self.y*v.x + (self.x, self.y, self.z)=(self.y*v.z-self.z*v.y, self.z*v.x-self.x*v.z, self.x*v.y-self.y*v.x) return self def __abs__(self): return math.sqrt(self.x*self.x + self.y*self.y + self.z*self.z) + ## Multiplicates the vector as to set the first nonzero coordinate to 1. + def canonize(self): + if self.x!=0: factor=self.x + elif self.y!=0: factor=self.y + elif self.z!=0: factor=self.z + else: factor=1 + self/=factor + return self + def __str__(self): return str((self.x,self.y,self.z))