/src/tesseract/src/ccstruct/quadratc.h
Line | Count | Source |
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; |
30 | | QUAD_COEFFS( // constructor |
31 | | double xsq, // coefficients |
32 | 674k | float x, float constant) { |
33 | 674k | a = xsq; |
34 | 674k | b = x; |
35 | 674k | c = constant; |
36 | 674k | } |
37 | | |
38 | | float y( // evaluate |
39 | 24.1M | float x) const { // at x |
40 | 24.1M | return static_cast<float>((a * x + b) * x + c); |
41 | 24.1M | } |
42 | | |
43 | | void move( // reposition word |
44 | 17.1k | 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 | 17.1k | int16_t p = vec.x(); |
51 | 17.1k | int16_t q = vec.y(); |
52 | | |
53 | 17.1k | c = static_cast<float>(c - b * p + a * p * p + q); |
54 | 17.1k | b = static_cast<float>(b - 2 * a * p); |
55 | 17.1k | } |
56 | | |
57 | | double a; // x squared |
58 | | float b; // x |
59 | | float c; // constant |
60 | | private: |
61 | | }; |
62 | | |
63 | | } // namespace tesseract |
64 | | |
65 | | #endif |