OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimQuadrilateralMap.cpp
Go to the documentation of this file.
2 #include <iostream>
3 using namespace std;
4 
5 #include <ossim/matrix/newmat.h>
8 
10  : a(0.0),
11  b(0.0),
12  c(0.0),
13  d(0.0),
14  e(0.0),
15  f(0.0),
16  g(0.0),
17  h(0.0)
18 {
19 }
21  const ossimDpt& sourceP2,
22  const ossimDpt& sourceP3,
23  const ossimDpt& sourceP4,
24  const ossimDpt& destP1,
25  const ossimDpt& destP2,
26  const ossimDpt& destP3,
27  const ossimDpt& destP4)
28 {
29  solveCoefficients(sourceP1, sourceP2, sourceP3, sourceP4,
30  destP1, destP2, destP3, destP4);
31 }
32 
34  :a(rhs.a),
35  b(rhs.b),
36  c(rhs.c),
37  d(rhs.d),
38  e(rhs.e),
39  f(rhs.f),
40  g(rhs.g)
41 {
42 }
43 
45  const ossimDpt& sourceP2,
46  const ossimDpt& sourceP3,
47  const ossimDpt& sourceP4,
48  const ossimDpt& destP1,
49  const ossimDpt& destP2,
50  const ossimDpt& destP3,
51  const ossimDpt& destP4)
52 {
53  NEWMAT::Matrix m(8,8);
54 
55  m << sourceP1.x << sourceP1.y << 1.0 << 0.0 << 0.0 << 0.0 << -sourceP1.x*destP1.x << -sourceP1.y*destP1.x
56  << sourceP2.x << sourceP2.y << 1.0 << 0.0 << 0.0 << 0.0 << -sourceP2.x*destP2.x << -sourceP2.y*destP2.x
57  << sourceP3.x << sourceP3.y << 1.0 << 0.0 << 0.0 << 0.0 << -sourceP3.x*destP3.x << -sourceP3.y*destP3.x
58  << sourceP4.x << sourceP4.y << 1.0 << 0.0 << 0.0 << 0.0 << -sourceP4.x*destP4.x << -sourceP4.y*destP4.x
59  << 0.0 << 0.0 << 0.0 << sourceP1.x << sourceP1.y << 1.0 << -sourceP1.x*destP1.y << -sourceP1.y*destP1.y
60  << 0.0 << 0.0 << 0.0 << sourceP2.x << sourceP2.y << 1.0 << -sourceP2.x*destP2.y << -sourceP2.y*destP2.y
61  << 0.0 << 0.0 << 0.0 << sourceP3.x << sourceP3.y << 1.0 << -sourceP3.x*destP3.y << -sourceP3.y*destP3.y
62  << 0.0 << 0.0 << 0.0 << sourceP4.x << sourceP4.y << 1.0 << -sourceP4.x*destP4.y << -sourceP4.y*destP4.y;
63 
64  NEWMAT::Matrix A = m.i();
65  NEWMAT::ColumnVector b(8);
66  b << destP1.x << destP2.x << destP3.x << destP4.x << destP1.y << destP2.y << destP3.y << destP4.y;
67  NEWMAT::ColumnVector y = A * b;
68 
69  a = y[0];
70  b = y[1];
71  c = y[2];
72  d = y[3];
73  e = y[4];
74  f = y[5];
75  g = y[6];
76  h = y[7];
77 }
78 
79 void ossimQuadrilateralMap::map(const ossimDpt& source, ossimDpt& dest)const
80 {
81  double numerator;
82  double denominator;
83 
84  //solve x first
85  numerator = a*source.x + b*source.y + c;
86  denominator = g*source.x + h*source.y + 1;
87 
88  dest.x = numerator/denominator;
89 
90  //solve y
91  numerator = d*source.x + e*source.y + f;
92  denominator = g*source.x + h*source.y + 1;
93 
94  dest.y = numerator/denominator;
95 }
ossim_uint32 y
double y
Definition: ossimDpt.h:165
#define A(r, c)
void solveCoefficients(const ossimDpt &sourceP1, const ossimDpt &sourceP2, const ossimDpt &sourceP3, const ossimDpt &sourceP4, const ossimDpt &destP1, const ossimDpt &destP2, const ossimDpt &destP3, const ossimDpt &destP4)
void map(const ossimDpt &source, ossimDpt &dest) const
double x
Definition: ossimDpt.h:164