/* 
  this script solves the projective transformation p11 to p32, with 
  (x1, y1) = 0, (x2, y2) = (w - 1, 0), {x3, y3) = (0, h - 1), (x4, y4) = (w - 1,  h - 1)
  (x1p, y1p), (x2p, y2p), (x3p, y3p), (x4p, y4p) correspond to the four corner of the window on the panaroma image 
  */

p11 = -((-(x2p*x3p*y1p) + x2p*x4p*y1p + x1p*x3p*y2p - 
        x1p*x4p*y2p + x1p*x4p*y3p - x2p*x4p*y3p - 
        x1p*x3p*y4p + x2p*x3p*y4p)/
      ((-1 + w)*(x3p*y2p - x4p*y2p - x2p*y3p + 
          x4p*y3p + x2p*y4p - x3p*y4p)));
p12 =  (-(x2p*x3p*y1p) + x3p*x4p*y1p + x1p*x4p*y2p - 
      x3p*x4p*y2p + x1p*x2p*y3p - x1p*x4p*y3p - 
      x1p*x2p*y4p + x2p*x3p*y4p)/
    ((-1 + h)*(x3p*y2p - x4p*y2p - x2p*y3p + x4p*y3p + 
        x2p*y4p - x3p*y4p));
p13 = x1p;

p21 = (x2p*y1p*y3p - x4p*y1p*y3p - x1p*y2p*y3p + 
      x4p*y2p*y3p - x2p*y1p*y4p + x3p*y1p*y4p + 
      x1p*y2p*y4p - x3p*y2p*y4p)/
    ((-1 + w)*(x3p*y2p - x4p*y2p - x2p*y3p + x4p*y3p + 
        x2p*y4p - x3p*y4p));

p22 = (x3p*y1p*y2p - x4p*y1p*y2p - x1p*y2p*y3p + 
      x4p*y2p*y3p + x2p*y1p*y4p - x3p*y1p*y4p + 
      x1p*y3p*y4p - x2p*y3p*y4p)/
    ((-1 + h)*(-(x3p*y2p) + x4p*y2p + x2p*y3p - 
        x4p*y3p - x2p*y4p + x3p*y4p));
p23 = y1p;
p31 =  -((x3p*y1p - x4p*y1p - x3p*y2p + x4p*y2p - 
        x1p*y3p + x2p*y3p + x1p*y4p - x2p*y4p)/
      ((-1 + w)*(-(x3p*y2p) + x4p*y2p + x2p*y3p - 
          x4p*y3p - x2p*y4p + x3p*y4p)));

p32 = (x2p*y1p - x4p*y1p - x1p*y2p + x3p*y2p - x2p*y3p + 
      x4p*y3p + x1p*y4p - x3p*y4p)/
    ((-1 + h)*(-(x3p*y2p) + x4p*y2p + x2p*y3p - 
        x4p*y3p - x2p*y4p + x3p*y4p));