1 // This is core/vnl/algo/vnl_fit_parabola.h
2 #ifndef vnl_fit_parabola_h_
3 #define vnl_fit_parabola_h_
4
5 //:
6 // \file
7 // \brief Function to fit a parabola to three point to predict the centre line
8 // \author Tim Cootes
9 // \date Feb 2007
10 //
11 // \verbatim
12 // Modifications
13 // \endverbatim
14
15 //: Fit a parabola so as to estimate the position of the centre line
16 // The centre (maxima or minima) lies at xb + p/q.
17 // If q is near zero, then the parabola is nearly flat
vnl_fit_parabola(double xa,double xb,double xc,double fa,double fb,double fc,double & p,double & q)18 inline void vnl_fit_parabola(double xa, double xb, double xc,
19 double fa, double fb, double fc,
20 double& p, double& q)
21 {
22 // Effectively shift origin to (xb,fb)
23 // Parabola is then y=a*x*x+b*x
24 // Centre is then at -b/2a = p/q in the following
25 double x1=xa-xb, f1 = fa-fb;
26 double x2=xc-xb, f2 = fc-fb;
27 p = x2*x2*f1-x1*x1*f2;
28 q = 2*(x2*f1-x1*f2);
29 }
30
31 #endif // vnl_fit_parabola_h_
32