diff --git a/methods/Method_I.cpp b/methods/Method_I.cpp index 91910c7eb9fabc068e58a85cbcba5d1c34c27dc2..d829056bde17f3f5b7be39f0e58f4223f53d9327 100644 --- a/methods/Method_I.cpp +++ b/methods/Method_I.cpp @@ -55,7 +55,6 @@ Method_I::Method_I() _circleEdges = -1; _fIndividualFD = nullptr; _calcIndividualFD = false; - _fVoronoiRhoV = nullptr; _areaForMethod_I = nullptr; _plotVoronoiCellData=false; _isOneDimensional=false; @@ -110,10 +109,6 @@ bool Method_I::Process(const PedData& peddata,const fs::path& scriptsLocation, c } } - if(!OpenFileMethodI()) - { - return_value = false; - } if(_calcIndividualFD) { if (!OpenFileIndividualFD()) @@ -183,16 +178,17 @@ bool Method_I::Process(const PedData& peddata,const fs::path& scriptsLocation, c // std::cout << ">> polygons_id " << polygons_id.size() << "\n"; vector<polygon_2d> polygons; for (auto p: polygons_id) + { polygons.push_back(p.first); + } if(!polygons.empty()) { - OutputVoronoiResults(polygons, str_frid, VInFrame); // TODO polygons_id if(_calcIndividualFD) { if(!_isOneDimensional) { - GetIndividualFD(polygons,VInFrame, IdInFrame, _areaForMethod_I->_poly, str_frid); // TODO polygons_id + GetIndividualFD(polygons,VInFrame, IdInFrame, str_frid); // TODO polygons_id } } if(_getProfile) @@ -214,7 +210,6 @@ bool Method_I::Process(const PedData& peddata,const fs::path& scriptsLocation, c } } }//peds - fclose(_fVoronoiRhoV); if(_calcIndividualFD) { fclose(_fIndividualFD); @@ -288,9 +283,10 @@ bool Method_I::Process(const PedData& peddata,const fs::path& scriptsLocation, c { polygons_id = vd.cutPolygonsWithCircle(polygons_id, XInFrame, YInFrame, _cutRadius,_circleEdges); } - // std:: cout << " GetPolygons cirlces " << polygons_id.size() << "\n"; +//todo HH polygons_id = vd.cutPolygonsWithGeometry(polygons_id, _geoPoly, XInFrame, YInFrame); - // std:: cout << " GetPolygons geometry " << polygons_id.size() << "\n"; + // todo HH + // std:: cout << dsv(_geoPoly) << "\n"; for(auto && p:polygons_id) { poly = p.first; @@ -527,7 +523,7 @@ bool Method_I::Process(const PedData& peddata,const fs::path& scriptsLocation, c } - void Method_I::GetIndividualFD(const vector<polygon_2d>& polygon, const vector<double>& Velocity, const vector<int>& Id, const polygon_2d& measureArea, const string& frid) + void Method_I::GetIndividualFD(const vector<polygon_2d>& polygon, const vector<double>& Velocity, const vector<int>& Id, const string& frid) { double uniquedensity=0; double uniquevelocity=0; @@ -535,29 +531,17 @@ bool Method_I::Process(const PedData& peddata,const fs::path& scriptsLocation, c int temp=0; for (const auto & polygon_iterator:polygon) { - polygon_list v; - intersection(measureArea, polygon_iterator, v); - if(!v.empty()) { - - string polygon_str = polygon_to_string(polygon_iterator); - // string measureArea_str = - // polygon_to_string(measureArea); // maybe used for debugging - string v_str = polygon_to_string(v[0]); - - uniquedensity=1.0/(area(polygon_iterator)*CMtoM*CMtoM); - uniquevelocity=Velocity[temp]; - uniqueId=Id[temp]; - fprintf(_fIndividualFD,"%s\t%d\t%.3f\t%.3f\t%s\t%s\n", - frid.c_str(), - uniqueId, - uniquedensity, - uniquevelocity, - polygon_str.c_str(), - v_str.c_str()); - } - else{ - std::cout << "empty interectio with the measurement aren\n"; - } + string polygon_str = polygon_to_string(polygon_iterator); + uniquedensity=1.0/(area(polygon_iterator)*CMtoM*CMtoM); + uniquevelocity=Velocity[temp]; + uniqueId=Id[temp]; + fprintf(_fIndividualFD,"%s\t%d\t%.3f\t%.3f\t%s\n", + frid.c_str(), + uniqueId, + uniquedensity, + uniquevelocity, + polygon_str.c_str() + ); temp++; } } diff --git a/methods/Method_I.h b/methods/Method_I.h index 76f54f614028c79b08c9b203dbdb7ed415a2dc3d..f04c1d1800d3dc35c7c2da28bc2912de559ed7af 100644 --- a/methods/Method_I.h +++ b/methods/Method_I.h @@ -103,7 +103,7 @@ private: std::tuple<double,double> GetVoronoiDensityVelocity(const std::vector<polygon_2d>& polygon, const std::vector<double>& Velocity, const polygon_2d & measureArea); void GetProfiles(const std::string& frameId, const std::vector<polygon_2d>& polygons, const std::vector<double>& velocity); void OutputVoroGraph(const std::string & frameId, std::vector<std::pair<polygon_2d, int> >& polygons, int numPedsInFrame,const std::vector<double>& VInFrame); - void GetIndividualFD(const std::vector<polygon_2d>& polygon, const std::vector<double>& Velocity, const std::vector<int>& Id, const polygon_2d& measureArea, const std::string& frid); + void GetIndividualFD(const std::vector<polygon_2d>& polygon, const std::vector<double>& Velocity, const std::vector<int>& Id, const std::string& frid); /** * Reduce the precision of the points to two digits * @param polygon diff --git a/methods/VoronoiDiagram.cpp b/methods/VoronoiDiagram.cpp index 61160a7d7f0f76ee50e99d49ac3a8f8c73c07fed..791375f3793e2e9dbdef693968892a26e1dcf09a 100644 --- a/methods/VoronoiDiagram.cpp +++ b/methods/VoronoiDiagram.cpp @@ -49,6 +49,7 @@ VoronoiDiagram::~VoronoiDiagram() std::vector<std::pair<polygon_2d, int> > VoronoiDiagram::getVoronoiPolygons(vector<double>& XInFrame, vector<double>& YInFrame, vector<double>& VInFrame, vector<int>& IdInFrame, const double Bound_Max) { + double M2CM = 10000; int numPedsInFrame = IdInFrame.size(); vector<int> XInFrame_temp; vector<int> YInFrame_temp; @@ -62,26 +63,26 @@ std::vector<std::pair<polygon_2d, int> > VoronoiDiagram::getVoronoiPolygons(vect { numPedsInFrame += 4; // up right - XInFrame.push_back(XInFrame[0]+10); - YInFrame.push_back(YInFrame[0]+10); + XInFrame.push_back(XInFrame[0]+10*M2CM); + YInFrame.push_back(YInFrame[0]+10*M2CM); VInFrame.push_back(VInFrame[0]); //IdInFrame.push_back(IdInFrame[0]+1); IdInFrame.push_back(-1); // up left - XInFrame.push_back(XInFrame[0]-10); - YInFrame.push_back(YInFrame[0]+10); + XInFrame.push_back(XInFrame[0]-10*M2CM); + YInFrame.push_back(YInFrame[0]+10*M2CM); VInFrame.push_back(VInFrame[0]); //IdInFrame.push_back(IdInFrame[0]+2); IdInFrame.push_back(-2); // down right - XInFrame.push_back(XInFrame[0]+10); - YInFrame.push_back(YInFrame[0]-10); + XInFrame.push_back(XInFrame[0]+10*M2CM); + YInFrame.push_back(YInFrame[0]-10*M2CM); VInFrame.push_back(VInFrame[0]); //IdInFrame.push_back(IdInFrame[0]+3); IdInFrame.push_back(-3); // down left - XInFrame.push_back(XInFrame[0]-10); - YInFrame.push_back(YInFrame[0]-10); + XInFrame.push_back(XInFrame[0]-10*M2CM); + YInFrame.push_back(YInFrame[0]-10*M2CM); VInFrame.push_back(VInFrame[0]); // IdInFrame.push_back(IdInFrame[0]+4); IdInFrame.push_back(-4); @@ -94,9 +95,12 @@ std::vector<std::pair<polygon_2d, int> > VoronoiDiagram::getVoronoiPolygons(vect YInFrame_temp.push_back(round(YInFrame[i])); VInFrame_temp.push_back(VInFrame[i]); IdInFrame_temp.push_back(IdInFrame[i]); + // std::cout << "i: " << i << " Id " << IdInFrame[i] << " pos = " << XInFrame[i] << ", " << YInFrame[i] << "\n"; + } + VD voronoidiagram; construct_voronoi(points.begin(), points.end(), &voronoidiagram); int Ncell = 0; @@ -133,8 +137,6 @@ std::vector<std::pair<polygon_2d, int> > VoronoiDiagram::getVoronoiPolygons(vect break; } } - if(IdInFrame[Ncell] < 0 ) - continue; XInFrame[Ncell] = thispoint.x(); YInFrame[Ncell] = thispoint.y(); @@ -229,11 +231,10 @@ std::vector<std::pair<polygon_2d, int> > VoronoiDiagram::getVoronoiPolygons(vect //cout << "poly is: " << typeid(poly).name() << '\n' int id_ped = IdInFrame[Ncell]; std::pair<polygon_2d, int> poly_id = std::make_pair(poly, id_ped); - // if (id_ped < 0 ) - // { - // std::cout << "HH id: " << id_ped << "\n"; - // continue; - // } + if (id_ped < 0 ) + { + continue; + } polygons_id.push_back(poly_id); Ncell++; }// for voronoi cells