Files
@ 1f1d49c1dbea
Branch filter:
Location: OneEye/src/grid.py - annotation
1f1d49c1dbea
2.2 KiB
text/x-python
correct corner handling
order the corners in counter-clockwise order, with the upper left first
EPoint extracted from gui.py
order the corners in counter-clockwise order, with the upper left first
EPoint extracted from gui.py
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)
|