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)