Files @ 3bc6cb7cfd8b
Branch filter:

Location: OneEye/src/grid.py

Laman
random commit
getting hang of projective geometry and numpy
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)