/*------------------------------------------------------------------------------*/
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;
}