/*------------------------------------------------------------------------------*/ GW_GeodesicVertex* GW_VoronoiMesh::FindMaxVertex( GW_GeodesicMesh& Mesh ) { GW_GeodesicVertex* pSelectedVert = NULL; GW_Float rMaxDist = -GW_INFINITE; for( GW_U32 i=0; i<Mesh.GetNbrVertex(); ++i ) { GW_GeodesicVertex* pVert = (GW_GeodesicVertex*) Mesh.GetVertex( i ); GW_ASSERT( pVert!=NULL ); if( pVert->GetFace()!=NULL && pVert->GetDistance()>rMaxDist ) { rMaxDist = pVert->GetDistance(); pSelectedVert = pVert; } } return pSelectedVert; }
/*------------------------------------------------------------------------------*/ GW_Vertex* GW_GeodesicMesh::GetRandomVertex(GW_Bool bForceFar) { GW_U32 nNumber = 0; GW_GeodesicVertex* pStartVertex = NULL; while( pStartVertex==NULL ) { if( nNumber>=this->GetNbrVertex()/10 ) return NULL; GW_U32 nNumVert = (GW_U32) floor(GW_RAND*this->GetNbrVertex()); pStartVertex = (GW_GeodesicVertex*) this->GetVertex( nNumVert ); if( bForceFar==GW_True && pStartVertex->GetState()!=GW_GeodesicVertex::kFar ) pStartVertex = NULL; if( pStartVertex!=NULL && pStartVertex->GetFace()==NULL ) pStartVertex = NULL; nNumber++; } return pStartVertex; }