/* 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; }; /* Methode de creation d'un tableau */ /* de Sommet2D initialise avec les positions */ /* des sommets d'un polygone regulier */ /* centre sur l'origine et de rayon r */ 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; } /* Methode de calcul de la distance */ /* entre deux 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; } /* Methode de calcul de la longueur */ /* d'une ligne polygonale ouverte stockee */ /* dans un tableau de Sommet2D */ 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; } /* Methode de calcul de la longueur */ /* d'une boucle polygonale stockee */ /* dans un tableau de Sommet2D */ 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)); } }