précédent | suivant | table des matières
Algorithme
Les arêtes externes sont les arêtes telles que tous les points de l’ensemble sont du même coté de l’arête. L’algorithme consiste donc à énumérer toutes les arêtes, et pour chaque arête calculer si tous les points sont du même coté de l’arête ou non.
void aretesExternes(ArrayList<Point> lp, ArrayList<Point> env){ // recherche des cotés extremes : // ceux tels que tous les points sont du même coté int nb = 0; env.clear(); // enumération des cotés for( int i = 0; i < lp.size(); ++i) for( int j = i+1; j < lp.size(); ++j){ // tous les points sont ils du même coté int k=0; double s = surface( lp, i, j, 0 ); // des points sur le coté // sont considérés indifféremment d'un coté ou de l'autre int cote = s < 0 ? -1 : s == 0 ? 0 : 1; ++nb; for( k = 1; k < lp.size(); ++k){ s = surface( lp, i, j, k ); int signe = s < 0 ? -1 : s == 0 ? 0 : 1; if(cote == 0) cote = signe; if(cote != signe && signe != 0) break; ++nb; } if( k == lp.size() ) { env.add(lp.get(i)); env.add(lp.get(j)); } } }
Estimation
Soit n le nombre de points. Evaluons le nombre d’appels de la méthode surface :
Ce nombre est au maximum : =