quadricFitting.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | cfMesh: A library for mesh generation
4  \\ / O peration |
5  \\ / A nd | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6  \\/ M anipulation | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9  This file is part of cfMesh.
10 
11  cfMesh is free software; you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by the
13  Free Software Foundation; either version 3 of the License, or (at your
14  option) any later version.
15 
16  cfMesh is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with cfMesh. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  quadricFitting
26 
27 Description
28  A class for fitting a quadric surface through the set of points. It is
29  useful for curvature estimation and for calculating normals.
30 
31 SourceFiles
32  quadricFittingI.H
33 
34 \*---------------------------------------------------------------------------*/
35 
36 #ifndef quadricFitting_H
37 #define quadricFitting_H
38 
39 #include "DynList.H"
40 #include "plane.H"
41 #include "simpleMatrix.H"
42 
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 
45 namespace Foam
46 {
47 
48 /*---------------------------------------------------------------------------*\
49  class quadricFitting Declaration
50 \*---------------------------------------------------------------------------*/
51 
52 class quadricFitting
53 {
54  // Private data
55  //- seed point for fitting the quadric surface
56  point origin_;
57 
58  //- normal vector at the origin
60 
61  //- x-coordinate vector for the transformed coordinate system
62  vector vecX_;
63 
64  //- y-coordinate vector for the transformed coordinate system
65  vector vecY_;
66 
67  //- other points
69 
70  //- transformed coordinates of other points
72 
73  //- coefficients of the quadric surface
75 
76  // Private member functions
77  //- initial estimate of the normal vector
78  void calculateNormalVector();
79 
80  //- calculate transformed coordinate system
82 
83  //- calculate coefficients of the quadric surface fit
85 
86  //- iterative procedure for updating normals
87  //- until the best fit is achieved
88  void calculateBestFit();
89 
90 public:
91 
92  // Constructors
93 
94  //- Construct from point, normal, and neighbouring points
95  template<class ListType>
96  inline quadricFitting(const point&, const vector, const ListType&);
97 
98  //- Construct from point and other points
99  template<class ListType>
100  inline quadricFitting(const point&, const ListType&);
101 
102  // Destructor
103  ~quadricFitting();
104 
105 
106  // Member Functions
107 
108  // Access
109 
110  //- Return surface normal
111  inline const vector& normal() const;
112 
113  //- Return min curvature
114  inline scalar minCurvature() const;
115 
116  //- Return max curvature
117  inline scalar maxCurvature() const;
118 
119  //- Return mean curvature
120  inline scalar meanCurvature() const;
121 
122  //- Return Gaussian curvature
123  inline scalar gaussianCurvature() const;
124 
125  //- Return min curvature vector
126  inline vector minCurvatureVector() const;
127 
128  //- Return max curvature vector
129  inline vector maxCurvatureVector() const;
130 };
131 
132 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
133 
134 } // End namespace Foam
135 
136 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
137 
138 #include "quadricFittingI.H"
139 
140 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
141 
142 #endif
143 
144 // ************************************************************************* //
Foam::quadricFitting::meanCurvature
scalar meanCurvature() const
Return mean curvature.
Definition: quadricFittingI.H:299
Foam::quadricFitting::transformedPoints_
DynList< point > transformedPoints_
transformed coordinates of other points
Definition: quadricFitting.H:70
Foam::quadricFitting::calculateCoordinateSystem
void calculateCoordinateSystem()
calculate transformed coordinate system
Definition: quadricFittingI.H:58
Foam::quadricFitting::minCurvatureVector
vector minCurvatureVector() const
Return min curvature vector.
Definition: quadricFittingI.H:311
Foam::quadricFitting::calculateQuadricCoeffs
void calculateQuadricCoeffs()
calculate coefficients of the quadric surface fit
Definition: quadricFittingI.H:114
Foam::quadricFitting::calculateNormalVector
void calculateNormalVector()
initial estimate of the normal vector
Definition: quadricFittingI.H:37
Foam::quadricFitting::normal_
vector normal_
normal vector at the origin
Definition: quadricFitting.H:58
Foam::quadricFitting
Definition: quadricFitting.H:51
Foam::quadricFitting::gaussianCurvature
scalar gaussianCurvature() const
Return Gaussian curvature.
Definition: quadricFittingI.H:305
Foam::quadricFitting::calculateBestFit
void calculateBestFit()
Definition: quadricFittingI.H:158
Foam::quadricFitting::~quadricFitting
~quadricFitting()
Definition: quadricFittingI.H:267
Foam::quadricFitting::vecY_
vector vecY_
y-coordinate vector for the transformed coordinate system
Definition: quadricFitting.H:64
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
plane.H
Foam::quadricFitting::vecX_
vector vecX_
x-coordinate vector for the transformed coordinate system
Definition: quadricFitting.H:61
Foam::quadricFitting::coefficients_
scalarField coefficients_
coefficients of the quadric surface
Definition: quadricFitting.H:73
Foam::quadricFitting::origin_
point origin_
seed point for fitting the quadric surface
Definition: quadricFitting.H:55
Foam::quadricFitting::normal
const vector & normal() const
Return surface normal.
Definition: quadricFittingI.H:273
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::quadricFitting::quadricFitting
quadricFitting(const point &, const vector, const ListType &)
Construct from point, normal, and neighbouring points.
Definition: quadricFittingI.H:201
Foam::DynList
Definition: DynList.H:53
Foam::quadricFitting::minCurvature
scalar minCurvature() const
Return min curvature.
Definition: quadricFittingI.H:279
Foam::quadricFitting::otherPoints_
DynList< point > otherPoints_
other points
Definition: quadricFitting.H:67
Foam::Vector< scalar >
simpleMatrix.H
quadricFittingI.H
Foam::quadricFitting::maxCurvatureVector
vector maxCurvatureVector() const
Return max curvature vector.
Definition: quadricFittingI.H:324
Foam::quadricFitting::maxCurvature
scalar maxCurvature() const
Return max curvature.
Definition: quadricFittingI.H:289
DynList.H