Files
@ 3bc6cb7cfd8b
Branch filter:
Location: OneEye/src/grid.py - annotation
3bc6cb7cfd8b
2.2 KiB
text/x-python
random commit
getting hang of projective geometry and numpy
getting hang of projective geometry and numpy
3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b 3bc6cb7cfd8b | 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)
|