comparison c/Motion.cpp @ 192:38974d27dd2d

connected_components is working with listS for vertex list
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 12 Dec 2011 02:05:26 -0500
parents 0e60a306d324
children 09c7881073f3
comparison
equal deleted inserted replaced
191:0e60a306d324 192:38974d27dd2d
72 result &= (ratio < accelerationBound) & (cosine > deviationBound); 72 result &= (ratio < accelerationBound) & (cosine > deviationBound);
73 } 73 }
74 return result; 74 return result;
75 } 75 }
76 76
77 bool FeatureTrajectory::minMaxSimilarity(const FeatureTrajectory& ft, const int& firstInstant, const int& lastInstant, float connectionDistance, float segmentationDistance) { 77 bool FeatureTrajectory::minMaxSimilarity(const FeatureTrajectory& ft, const int& firstInstant, const int& lastInstant, const float& connectionDistance, const float& segmentationDistance) {
78 float minDistance = norm(positions->getPointAtInstant(firstInstant)-ft.positions->getPointAtInstant(firstInstant)); 78 float minDistance = norm(positions->getPointAtInstant(firstInstant)-ft.positions->getPointAtInstant(firstInstant));
79 float maxDistance = minDistance; 79 float maxDistance = minDistance;
80 bool connected = (minDistance <= connectionDistance); 80 bool connected = (minDistance <= connectionDistance);
81 int t=firstInstant+1; 81 int t=firstInstant+1;
82 while (t <= lastInstant && connected) { 82 while (t <= lastInstant && connected) {
166 } 166 }
167 } 167 }
168 } 168 }
169 169
170 vector<vector<FeatureGraph::vertex_descriptor> > FeatureGraph::connectedComponents(const int& lastInstant) { 170 vector<vector<FeatureGraph::vertex_descriptor> > FeatureGraph::connectedComponents(const int& lastInstant) {
171 int nVertices = num_vertices(graph); 171 computeVertexIndex();
172 vector<vertex_descriptor> components(nVertices); 172 property_map<UndirectedGraph, int VertexInformation::*>::type components = get(&VertexInformation::index, graph);
173 // map<UndirectedGraph::vertex_descriptor, graph_traits<UndirectedGraph>::vertices_size_type> vertex2component; 173
174 // associative_property_map< map<UndirectedGraph::vertex_descriptor, graph_traits<UndirectedGraph>::vertices_size_type> > components(vertex2component); 174 int num = connected_components(graph, components, vertex_index_map(get(&VertexInformation::index, graph)));
175
176 int num = connected_components(graph, &components[0]);
177 cout << "Total number of components: " << num << endl; 175 cout << "Total number of components: " << num << endl;
178 176
179 vector<unsigned int> lastInstants(num, 0); 177 vector<unsigned int> lastInstants(num, 0);
180 vector<vector<vertex_descriptor> > tmpobjects(num), objects; 178 vector<vector<vertex_descriptor> > tmpobjects(num), objects;
181 179
182 for (int i = 0; i < nVertices; ++i) { 180 graph_traits<UndirectedGraph>::vertex_iterator vi, vend;
183 cout << "Vertex " << i <<" is in component " << components[i] << endl;// "(last " << graph[i].feature->getLastInstant() << " " << lastInstants[components[i]] << " " << (lastInstants[components[i]] < graph[i].feature->getLastInstant()) << ")" << endl; 181 for(tie(vi,vend) = vertices(graph); vi != vend; ++vi) {
184 if (lastInstants[components[i]] < graph[i].feature->getLastInstant()) 182 //for (int i = 0; i < nVertices; ++i) {
185 lastInstants[components[i]] = graph[i].feature->getLastInstant(); 183 unsigned int id = components[*vi];
186 tmpobjects[components[i]].push_back(i); 184 cout << "Vertex " << *vi << " is in component " << id << endl;// "(last " << graph[i].feature->getLastInstant() << " " << lastInstants[components[i]] << " " << (lastInstants[components[i]] < graph[i].feature->getLastInstant()) << ")" << endl;
185 if (lastInstants[id] < graph[*vi].feature->getLastInstant())
186 lastInstants[id] = graph[*vi].feature->getLastInstant();
187 tmpobjects[id].push_back(*vi);
187 } 188 }
188 189
189 for (int i = 0; i < num; ++i) { 190 for (int i = 0; i < num; ++i) {
190 cout << i << " " << lastInstants[i] << endl; 191 cout << i << " " << lastInstants[i] << endl;
191 if (static_cast<int>(lastInstants[i]) < lastInstant) 192 if (static_cast<int>(lastInstants[i]) < lastInstant)
219 string FeatureGraph::informationString(void) { 220 string FeatureGraph::informationString(void) {
220 stringstream ss; 221 stringstream ss;
221 ss << num_vertices(graph) << " vertices, " << num_edges(graph) << " edges"; 222 ss << num_vertices(graph) << " vertices, " << num_edges(graph) << " edges";
222 return ss.str(); 223 return ss.str();
223 } 224 }
225
226 void FeatureGraph::computeVertexIndex(void) {
227 graph_traits<FeatureGraph::UndirectedGraph>::vertex_iterator vi, vend;
228 graph_traits<FeatureGraph::UndirectedGraph>::vertices_size_type cnt = 0;
229 for(tie(vi,vend) = vertices(graph); vi != vend; ++vi)
230 graph[*vi].index = cnt++;
231 }