// StatSommesX_Y_H_dbl.h: interface for the C_SumsRegLineXYHDbl class. // #if !defined(AFX_STATSOMMESX_Y_H_DBL_H__EA007980_0205_11D6_B96A_DB3892D34B43__INCLUDED_) #define AFX_STATSOMMESX_Y_H_DBL_H__EA007980_0205_11D6_B96A_DB3892D34B43__INCLUDED_ #ifndef GITHUB #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Line.h" /// class used in segmentation algo filtering method /**cette classe sert a calculer des sommes moyennes et variances necessaires a l'tabissement d'une droite de regresssion*/ /**cette classe sert a calculer des sommes moyennes et variances necessaires a l'tabissement d'une droite de regresssion*/ class C_SumsRegLineXYHDbl { public: //! to reset the structure. /*! this function reassign to the member their default value. */ void clear(); //gets the barycenter of the points cloud cv::Point2f barycenter(const int nb_elements); C_Line regression_line(const int nb_elements); float pente(const int nb_elements) const; #ifdef _DEBUG bool debug(const float & somme_x_, const float & somme_y_, const float & produit_xy_, const float & somme_carre_x_) const; bool debug(const float & somme_x_, const float & somme_y_, const float & produit_xy_, const float & somme_carre_x_, const int heigth_) const; #endif //_DEBUG //************************** // construct/destruct //************************** C_SumsRegLineXYHDbl(); C_SumsRegLineXYHDbl(const int somme_hauteurs_); virtual ~C_SumsRegLineXYHDbl(); //sum of x coordinates of points cloud float somme_x; //sum of y coordinates of points cloud float somme_y; //sum of x by y coordinates product of points cloud float produit_xy; //sum of squared x coordinates of points cloud float somme_carre_x; //sum of heights of bouding boxes (not used in that project) int somme_hauteurs; inline void add(const float& x, const float& y, const int hauteur) { somme_x += x; somme_y += y; produit_xy += x*y; somme_carre_x += x*x; somme_hauteurs += hauteur; } inline void operator+=(const cv::Point2f & Center) { somme_x += Center.x; somme_y += Center.y; produit_xy += Center.x*Center.y; somme_carre_x += Center.x*Center.x; } inline void operator-=(const cv::Point2f & Center) { somme_x -= Center.x; somme_y -= Center.y; produit_xy -= Center.x*Center.y; somme_carre_x -= Center.x*Center.x; #ifdef _DEBUG assert(somme_x >=0 && somme_y >=0 && produit_xy >=0 && somme_carre_x>=0); #endif //_DEBUG } inline void substract(const float & x, const float & y, const int hauteur) { somme_x -= x; somme_y -= y; produit_xy -= x*y; somme_carre_x -=x*x; #ifdef _DEBUG assert(somme_x >=0 && somme_y >=0 && produit_xy >=0 && somme_carre_x>=0); #endif //_DEBUG somme_hauteurs -= hauteur; } inline void operator+=(const C_SumsRegLineXYHDbl & stat) { somme_x += stat.somme_x; somme_y += stat.somme_y; produit_xy += stat.produit_xy; somme_carre_x += stat.somme_carre_x; somme_hauteurs+=stat.somme_hauteurs; } inline void subtract(const cv::Point2f & Center, const int hauteur) { somme_x -= Center.x; somme_y -= Center.y; produit_xy -= Center.x*Center.y; somme_carre_x-=Center.x*Center.x; somme_hauteurs-=hauteur; } bool operator ==(const C_SumsRegLineXYHDbl & right_op) const; }; #endif //GITHUB #endif // !defined(AFX_STATSOMMESX_Y_H_DBL_H__EA007980_0205_11D6_B96A_DB3892D34B43__INCLUDED_)