Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di mica81
    Registrato dal
    Nov 2003
    Messaggi
    87

    [c++] perimetro di un poligono

    salve a tutti.
    vi riporto il codice per calcolare il perimetro di un poligono regolare con un dato numero di vertici (massimo 100). vengono fornite le coordinate di ogni vertice e il loro numero:

    #include<iostream>
    #include<math>
    struct punto {double x; double y;};
    double lunghezza(punto p1, punto p2)
    { double dx = p2.x - p1.x;
    double dy = p2.y - p1.y;
    return sqrt(dx*dx + dy*dy);
    }
    int main()
    {
    punto polig[100]; int i, j, nvertici;
    double perim = 0.0;
    cout<<"Scrivi il numero dei vertici\n";
    cin>>nvertici;
    cout<<"Scrivi le coordinate x e y "
    "dei vertici:\n";
    for (i=0; i<nvertici; i++)
    cin>> polig[i].x >> polig[i].y;
    for (i=0; i<nvertici; i++)
    {
    j = (i + 1)% nvertici;
    perim += lung(polig[i], polig[j]);
    }
    cout<<"il perimetro e' "<< perim <<'\n';
    return 0;
    }

    dunque non mi è chiara la parte:
    for (i=0; i<nvertici; i++)
    {
    j = (i + 1)% nvertici;
    perim += lung(polig[i], polig[j]);
    }
    perchè gli devo passare j? cosa signnifica?
    grazie...

  2. #2

    Re: [c++] perimetro di un poligono

    Originariamente inviato da mica81
    salve a tutti.
    vi riporto il codice per calcolare il perimetro di un poligono regolare con un dato numero di vertici (massimo 100). vengono fornite le coordinate di ogni vertice e il loro numero:

    #include<iostream>
    #include<math>
    struct punto {double x; double y;};
    double lunghezza(punto p1, punto p2)
    { double dx = p2.x - p1.x;
    double dy = p2.y - p1.y;
    return sqrt(dx*dx + dy*dy);
    }
    int main()
    {
    punto polig[100]; int i, j, nvertici;
    double perim = 0.0;
    cout<<"Scrivi il numero dei vertici\n";
    cin>>nvertici;
    cout<<"Scrivi le coordinate x e y "
    "dei vertici:\n";
    for (i=0; i<nvertici; i++)
    cin>> polig[i].x >> polig[i].y;
    for (i=0; i<nvertici; i++)
    {
    j = (i + 1)% nvertici;
    perim += lung(polig[i], polig[j]);
    }
    cout<<"il perimetro e' "<< perim <<'\n';
    return 0;
    }

    dunque non mi è chiara la parte:
    for (i=0; i<nvertici; i++)
    {
    j = (i + 1)% nvertici;
    perim += lung(polig[i], polig[j]);
    }
    perchè gli devo passare j? cosa signnifica?
    grazie...
    attendere prego... copio, incollo, indento, compilo e rispondo :metallica

  3. #3
    Allora, per calcolare il perimetro di un poligono con n vertici (chiamiamoli v0, v1, v2 etc.) bisogna ovviamente fare la sommatoria delle lunghezze di tutte le coppie di vertici consecutive, cioè:

    v0-v1, v1-v2, v2-v3 ......vn-v0
    (col trattino non voglio indicare la differenza ma la lunghezza tra due vertici)

    Ho evidenziato l'ultimo calcolo, perchè bisogna trovare la lunghezza tra l'ultimo vertice ed il primo (che sono consecutivi)

    un modo semplice è:
    ----------
    for (i=0; i<nvertici; i++)
    perim += lung(polig[i], polig[i+1]);

    perim += lungh(polig[nvertici],polig[0]); // ultima somma
    ---------

    Nel tuo algoritmo c'è una soluzione più elegante: facendo "i+1 % nvertici" (cioè i+1 modulo nvertici (cioè il resto tra la divisione fra i+1 e nvertici)), si calcolerà l'indice del vertice successivo: se il vertice i è compreso tra 0 e n-1, allora varrà i+1; altrimenti varrà 0 che è proprio il vertice successivo a n (questo perchè nvertici % nvertici dà resto 0)


  4. #4
    Utente di HTML.it L'avatar di mica81
    Registrato dal
    Nov 2003
    Messaggi
    87
    aaaaaaaaaaaah!
    grazie adesso ho capito. sei molto simpatico!

  5. #5
    Originariamente inviato da mica81
    aaaaaaaaaaaah!
    grazie adesso ho capito. sei molto simpatico!
    tanks

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.