From 7f514688981a981b0b09007a84d05c119715e5b2 Mon Sep 17 00:00:00 2001 From: mjjo Date: Mon, 16 Sep 2013 22:55:18 +0000 Subject: [PATCH] --- LeastSquarePolynomial.cpp | 60 +++++++++++++++++++++++++++++++++++++++ LeastSquarePolynomial.h | 0 PatternChecker.vcproj | 8 ++++++ 3 files changed, 68 insertions(+) create mode 100644 LeastSquarePolynomial.cpp create mode 100644 LeastSquarePolynomial.h diff --git a/LeastSquarePolynomial.cpp b/LeastSquarePolynomial.cpp new file mode 100644 index 0000000..e161e29 --- /dev/null +++ b/LeastSquarePolynomial.cpp @@ -0,0 +1,60 @@ +#include "LeastSquarePolynomial.h" + +// form of [ y = a1*x + a2 ] +void CalcEquation2(float afA[2], const float afX[2], const float afY[2]) +{ + afA[0] = (afY[0]-afY[1])/(afX[0]-afX[1]); + afA[1] = afY[0] - afA[0]*afX[0]; +} + +// form of [ y = a1*x*x + a2*x + a3 ] +void CalcEquation3(float afA[3], const float afX[3], const float afY[3]) +{ + //afY[0] = afA[0]*afX[0]*afX[0] + afA[1]*afX[0] + afA[2]; + //afY[1] = afA[0]*afX[1]*afX[1] + afA[1]*afX[1] + afA[2]; + + //(afY[0]-afY[1]) = afA[0]*(afX[0]*afX[0]-afX[1]*afX[1]) + afA[1]*(afX[0]-afX[1]); + //(afY[0]-afY[2]) = afA[0]*(afX[0]*afX[0]-afX[2]*afX[2]) + afA[1]*(afX[0]-afX[2]); + + //(afY[0]-afY[1])/(afX[0]-afX[1]) = afA[0]*(afX[0]*afX[0]-afX[1]*afX[1])/(afX[0]-afX[1]) + afA[1]; + //(afY[0]-afY[2])/(afX[0]-afX[2]) = afA[0]*(afX[0]*afX[0]-afX[2]*afX[2])/(afX[0]-afX[2]) + afA[2]; + + const float afNewX[2] = { + (afX[0]*afX[0]-afX[1]*afX[1])/(afX[0]-afX[1]), + (afX[0]*afX[0]-afX[2]*afX[2])/(afX[0]-afX[2]) + }; + + const float afNewY[2] = { + (afY[0]-afY[1])/(afX[0]-afX[1]), + (afY[0]-afY[2])/(afX[0]-afX[2]) + }; + + CalcEquation2(afA, afNewX, afNewY); + afA[2] = afY[0] - afA[0]*afX[0]*afX[0] - afA[1]*afX[0]; +} + +// form of [ y = a1*x*x*x + a2*x*x + a3*x + a4 ] +void CalcEquation4(float afA[4], const float afX[4], const float afY[4]) +{ + //afY[0] = afA[0]*afX[0]*afX[0]*afX[0] + afA[1]*afX[0]*afX[0] + afA[2]*afX[0] + afA[3]; + //afY[1] = afA[0]*afX[1]*afX[1]*afX[1] + afA[1]*afX[1]*afX[1] + afA[2]*afX[1] + afA[3]; + + //(afY[0]-afY[0]) = afA[0]*(afX[0]*afX[0]*afX[0]-afX[1]*afX[1]*afX[1]) + afA[1]*(afX[0]*afX[0]-afX[1]*afX[1]) + afA[2]*(afX[0]-afX[1]); + + //(afY[0]-afY[0])/(afX[0]-afX[1]) = afA[0]*(afX[0]*afX[0]*afX[0]-afX[1]*afX[1]*afX[1])/(afX[0]-afX[1]) + afA[1]*(afX[0]*afX[0]-afX[1]*afX[1])/(afX[0]-afX[1]) + afA[2]; + + const float afNewX[3] = { + (afX[0]*afX[0]*afX[0]-afX[1]*afX[1]*afX[1])/(afX[0]-afX[1]), + (afX[0]*afX[0]*afX[0]-afX[2]*afX[2]*afX[2])/(afX[0]-afX[2]), + (afX[0]*afX[0]*afX[0]-afX[3]*afX[3]*afX[3])/(afX[0]-afX[3]) + }; + + const float afNewY[3] = { + (afY[0]-afY[0])/(afX[0]-afX[1]), + (afY[0]-afY[0])/(afX[0]-afX[2]), + (afY[0]-afY[0])/(afX[0]-afX[3]) + }; + + CalcEquation3(afA, afNewX, afNewY); + afA[3] = afY[0] - afA[0]*afX[0]*afX[0]*afX[0] - afA[1]*afX[0]*afX[0] - afA[2]*afX[0]; +} \ No newline at end of file diff --git a/LeastSquarePolynomial.h b/LeastSquarePolynomial.h new file mode 100644 index 0000000..e69de29 diff --git a/PatternChecker.vcproj b/PatternChecker.vcproj index d74a8a5..4d10a34 100644 --- a/PatternChecker.vcproj +++ b/PatternChecker.vcproj @@ -161,6 +161,10 @@ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > + + @@ -179,6 +183,10 @@ RelativePath=".\Define.h" > + +