Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
QLSQ Class Reference

#include <quadlsq.h>

Public Member Functions

 QLSQ ()
 
void clear ()
 
void add (double x, double y)
 
void remove (double x, double y)
 
inT32 count ()
 
void fit (int degree)
 
double get_a ()
 
double get_b ()
 
double get_c ()
 

Detailed Description

Definition at line 25 of file quadlsq.h.

Constructor & Destructor Documentation

QLSQ::QLSQ ( )
inline

Definition at line 28 of file quadlsq.h.

28  { //constructor
29  clear(); //set to zeros
30  }
void clear()
Definition: quadlsq.cpp:36

Member Function Documentation

void QLSQ::add ( double  x,
double  y 
)

Definition at line 58 of file quadlsq.cpp.

61  {
62  n++; //count elements
63  sigx += x; //update accumulators
64  sigy += y;
65  sigxx += x * x;
66  sigxy += x * y;
67  sigyy += y * y;
68  sigxxx += (long double) x *x * x;
69  sigxxy += (long double) x *x * y;
70  sigxxxx += (long double) x *x * x * x;
71 }
void QLSQ::clear ( )

Definition at line 36 of file quadlsq.cpp.

36  { //initialize
37  a = 0;
38  b = 0;
39  c = 0;
40  n = 0; //no elements
41  sigx = 0; //update accumulators
42  sigy = 0;
43  sigxx = 0;
44  sigxy = 0;
45  sigyy = 0;
46  sigxxx = 0;
47  sigxxy = 0;
48  sigxxxx = 0;
49 }
inT32 QLSQ::count ( )
inline

Definition at line 39 of file quadlsq.h.

39  { //no of elements
40  return n;
41  }
void QLSQ::fit ( int  degree)

Definition at line 105 of file quadlsq.cpp.

107  {
108  long double cubetemp; //intermediates
109  long double squaretemp;
110  long double top96, bottom96; /*accurate top & bottom */
111 
112  if (n >= 4 && degree >= 2) {
113  cubetemp = sigxxx * n - (long double) sigxx *sigx;
114 
115  top96 =
116  cubetemp * ((long double) sigxy * n - (long double) sigx * sigy);
117 
118  squaretemp = (long double) sigxx *n - (long double) sigx *sigx;
119 
120  top96 += squaretemp * ((long double) sigxx * sigy - sigxxy * n);
121 
122  bottom96 = cubetemp * cubetemp;
123 
124  bottom96 -= squaretemp * (sigxxxx * n - (long double) sigxx * sigxx);
125 
126  a = top96 / bottom96;
127 
128  top96 = ((long double) sigxx * sigx - sigxxx * n) * a
129  + (long double) sigxy *n - (long double) sigx *sigy;
130  bottom96 = (long double) sigxx *n - (long double) sigx *sigx;
131  b = top96 / bottom96;
132 
133  c = (sigy - a * sigxx - b * sigx) / n;
134  }
135  else if (n == 0 || degree < 0) {
136  a = b = c = 0;
137  }
138  else {
139  a = 0;
140  if (n > 1 && degree > 0) {
141  b = (sigxy * n - sigx * sigy) / (sigxx * n - sigx * sigx);
142  }
143  else
144  b = 0;
145  c = (sigy - b * sigx) / n;
146  }
147 }
double QLSQ::get_a ( )
inline

Definition at line 45 of file quadlsq.h.

45  { //get x squard
46  return a;
47  }
double QLSQ::get_b ( )
inline

Definition at line 48 of file quadlsq.h.

48  { //get x squard
49  return b;
50  }
double QLSQ::get_c ( )
inline

Definition at line 51 of file quadlsq.h.

51  { //get x squard
52  return c;
53  }
void QLSQ::remove ( double  x,
double  y 
)

Definition at line 80 of file quadlsq.cpp.

83  {
84  if (n <= 0)
85  //illegal
86  EMPTY_QLSQ.error ("QLSQ::remove", ABORT, NULL);
87  n--; //count elements
88  sigx -= x; //update accumulators
89  sigy -= y;
90  sigxx -= x * x;
91  sigxy -= x * y;
92  sigyy -= y * y;
93  sigxxx -= (long double) x *x * x;
94  sigxxy -= (long double) x *x * y;
95  sigxxxx -= (long double) x *x * x * x;
96 }
Definition: errcode.h:30
#define NULL
Definition: host.h:144
const ERRCODE EMPTY_QLSQ
Definition: quadlsq.cpp:26
void error(const char *caller, TessErrorLogCode action, const char *format,...) const
Definition: errcode.cpp:41

The documentation for this class was generated from the following files: