diff --git a/grid.py b/src/grid.py copy from grid.py copy 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)