00001
00002 #ifndef MEAN_H
00003 #define MEAN_H
00004
00005 #include <math.h>
00006 #include <vector>
00007 #include "Object.h"
00008 #include "ObjectParser.h"
00009 #include "misc.h"
00010 #include "Vector.h"
00011
00012 namespace FD {
00013
00014 class Mean : public Vector<double>
00015 {
00016 protected:
00017 int mode;
00018 int accum_count;
00019 int dimension;
00020 public:
00021 enum Mode {accum=0, real, rotated, inverted};
00022 Mean()
00023 : Vector<double>()
00024 , mode(accum)
00025 , accum_count(0)
00026 , dimension(0)
00027 {}
00028
00029 Mean(int n, const double &x = 0)
00030 : Vector<double>(n, x)
00031 , mode(accum)
00032 , accum_count(0)
00033 , dimension(n)
00034 {}
00035
00036 int getAccum() {return accum_count;}
00037
00038 void accumFrame(const float *v)
00039 {
00040 for (int i=0;i<dimension;i++)
00041 this->operator[] (i) += v[i];
00042 accum_count++;
00043 }
00044
00045 void accumFrame(const std::vector<float> &v)
00046 {
00047 for (int i=0;i<v.size();i++)
00048 this->operator[] (i) += v[i];
00049 accum_count++;
00050 }
00051
00052 void toReal()
00053 {
00054 double accum_1 = 1.0/accum_count;
00055 for (int i=0;i<dimension;i++)
00056 this->operator[] (i) *= accum_1;
00057 mode = real;
00058 }
00059
00060 void resetToAccum()
00061 {
00062 for (int i=0;i<dimension;i++)
00063 this->operator[] (i) = 0.0;
00064 mode = accum;
00065 accum_count = 0;
00066 }
00067
00069 virtual void printOn(std::ostream &out=std::cout) const;
00070
00072 void readFrom (std::istream &in=std::cin);
00073
00075 friend std::istream &operator >> (std::istream &in, Mean &cov);
00076
00077 };
00078
00079 }
00080
00081 #endif