/* Calcul sur des tableaux de sommets 2D       */
/* representant des lignes polygonales         */

public class TableauSommets2DEnConsole {

/////////////////////////////////////////////////

/* 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) {
    Console.setTitle("TableauSommets2D");
    Sommet2D [] ts;
    int n;
    double r;
    Console.afficher("SVP, nombre de sommets? ");
    n = Console.saisirInt();
    Console.afficher("SVP, rayon? ");
    r = Console.saisirDouble();
    ts = polygoneRegulier(n,r);
    Console.afficher("Longueur ligne  : ");
    Console.afficherln(longueurLigne(ts));
    Console.afficher("Longueur boucle : ");
    Console.afficherln(longueurBoucle(ts));
    }
}