/* Calcul sur des tableaux de sommets 2D */ /* representant des lignes polygonales */ public class TableauSommets2D { ///////////////////////////////////////////////// /* Type agrege de stockage d'un sommet 2D */ static class Sommet2D { double x = 0.0; double y = 0.0; }; /* Fonction de creation et de retour */ /* d'un tableau de Sommet2D initialise */ /* avec les positions des sommets */ /* d'un polygone regulier */ /* centre sur l'origine et de rayon r */ /* n : Le nombre de sommets du polygone */ /* r : Le rayon du polygone */ static Sommet2D [] polygoneRegulier(int n,double r) { int i; double angle; Sommet2D [] t = new Sommet2D[n]; for ( i = 0 ; i < n ; i = i+1 ) { angle = i * 2.0 * Math.PI / n; t[i] = new Sommet2D(); t[i].x = r * Math.cos(angle); t[i].y = r * Math.sin(angle); } return t; } /* Fonction de calcul et de retour */ /* de la distance entre deux Sommet2D */ /* p1 : Le premier Sommet2D */ /* p2 : Le second Sommet2D */ static double distance(Sommet2D p1,Sommet2D p2) { double l; double dx; double dy; dx = p2.x-p1.x; dy = p2.y-p1.y; l = Math.sqrt(dx*dx+dy*dy); return l; } /* Fonction de calcul de la longueur */ /* d'une ligne polygonale ouverte stockee */ /* dans un tableau de Sommet2D */ /* t : Le tableau de Sommet2D contenant */ /* les position des sommets de la ligne */ static double longueurLigne(Sommet2D [] t) { double l; l = 0.0; int i; for ( i = 0 ; i < t.length-1 ; i++ ) { l = l+distance(t[i],t[i+1]); } return l; } /* Fonction de calcul de la longueur */ /* d'une boucle polygonale stockee */ /* dans un tableau de Sommet2D */ /* t : Le tableau de Sommet2D contenant */ /* les position des sommets de la boucle */ static double longueurBoucle(Sommet2D [] t) { double l; l = longueurLigne(t) + distance(t[0],t[t.length-1]); return l; } ///////////////////////////////////////////////// /* Programme principal */ public static void main(String [] args) { Sommet2D [] ts; int n; double r; Ecran.afficher("SVP, nombre de sommets? "); n = Clavier.saisirInt(); Ecran.afficher("SVP, rayon? "); r = Clavier.saisirDouble(); ts = polygoneRegulier(n,r); Ecran.afficher("Longueur ligne : "); Ecran.afficherln(longueurLigne(ts)); Ecran.afficher("Longueur boucle : "); Ecran.afficherln(longueurBoucle(ts)); } }