1 /**********************************************************************
2  * File:        quadratc.h  (Formerly quadrtic.h)
3  * Description: Code for the QUAD_COEFFS class.
4  * Author:      Ray Smith
5  * Created:     Tue Oct 08 17:24:40 BST 1991
6  *
7  * (C) Copyright 1991, Hewlett-Packard Ltd.
8  ** Licensed under the Apache License, Version 2.0 (the "License");
9  ** you may not use this file except in compliance with the License.
10  ** You may obtain a copy of the License at
11  ** http://www.apache.org/licenses/LICENSE-2.0
12  ** Unless required by applicable law or agreed to in writing, software
13  ** distributed under the License is distributed on an "AS IS" BASIS,
14  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  ** See the License for the specific language governing permissions and
16  ** limitations under the License.
17  *
18  **********************************************************************/
19 
20 #ifndef QUADRATC_H
21 #define QUADRATC_H
22 
23 #include "points.h"
24 
25 namespace tesseract {
26 
27 class QUAD_COEFFS {
28 public:
29   QUAD_COEFFS() = default;
QUAD_COEFFS(double xsq,float x,float constant)30   QUAD_COEFFS(    // constructor
31       double xsq, // coefficients
32       float x, float constant) {
33     a = xsq;
34     b = x;
35     c = constant;
36   }
37 
y(float x)38   float y(             // evaluate
39       float x) const { // at x
40     return static_cast<float>((a * x + b) * x + c);
41   }
42 
move(ICOORD vec)43   void move(        // reposition word
44       ICOORD vec) { // by vector
45     /************************************************************
46   y - q = a (x - p)^2 + b (x - p) + c
47   y - q = ax^2 - 2apx + ap^2 + bx - bp + c
48     y = ax^2 + (b - 2ap)x + (c - bp + ap^2 + q)
49 ************************************************************/
50     int16_t p = vec.x();
51     int16_t q = vec.y();
52 
53     c = static_cast<float>(c - b * p + a * p * p + q);
54     b = static_cast<float>(b - 2 * a * p);
55   }
56 
57   double a; // x squared
58   float b;  // x
59   float c;  // constant
60 private:
61 };
62 
63 } // namespace tesseract
64 
65 #endif
66