CurvaturePartial::CurvaturePartial( Vertex& v, Vertex& w ){ wrtRadius = true; verticesMatch = (v.getIndex() == w.getIndex()); verticesAdjacent = ( v.isAdjVertex( w.getIndex() ) ); if( ! ( verticesMatch || verticesAdjacent ) ) return; vRadius = Radius::At( v ); vCurv = Curvature3D::At( v ); vRadius->addDependent(this); vCurv->addDependent(this); dualAreas = new vector<DualArea*>(); dihSums = new vector<DihedralAngleSum*>(); lengths = new vector<Length*>(); etas = new vector<Eta*>(); radii = new vector<Radius*>(); vector<int> edges; if( verticesMatch ){ edges = *(v.getLocalEdges()); } else if ( verticesAdjacent ){ edges = listIntersection( v.getLocalEdges(), w.getLocalEdges() ); } StdEdge se; DualArea* da; DihedralAngleSum* ds; Length* l; Eta* eta; Radius* r; for(int ii = 0; ii < edges.size(); ii++){ Edge& ed = Triangulation::edgeTable[ edges[ii] ]; da = DualArea::At( ed ); da->addDependent( this ); dualAreas->push_back( da ); ds = DihedralAngleSum::At( ed ); ds->addDependent( this ); dihSums->push_back( ds ); l = Length::At( ed ); l->addDependent( this ); lengths->push_back( l ); eta = Eta::At( ed ); eta->addDependent( this ); etas->push_back( eta ); se = labelEdge( ed, v ); r = Radius::At( Triangulation::vertexTable[ se.v2 ] ); r->addDependent( this ); radii->push_back( r ); } }
void dfsvisit(graph * g, int source, int * p, int * b , int * f , int *s, int *tm) { printf("%x\n", tm); *tm = *tm + 1; b[source] = *tm; s[source] = 1; node * ele; int t; ele = g->adj[source]; while(ele != NULL) { t = ele->v; if(s[t] == 0) { // discovery edge p[t] = source; labelEdge(g, source, t, 'd'); dfsvisit(g, t, p, b, f, s, tm); } else if(b[t] < b[source] && s[t] == 1) { //backward edge labelEdge(g, source, t, 'b'); } else if(b[t] > b[source] && s[t] == 2 && f[t] > b[t]) { // forward edge labelEdge(g, source, t, 'f'); } else { // cross edge labelEdge(g, source, t, 'c'); } ele = ele->next; } *tm = *tm + 1; f[source] = *tm; s[source] = 2; }