[C++] poligoni e strutture

Messaggioda cooper » 19/09/2018, 16:01

Descrivere una struttura idonea a rappresentare un poligono nel piano attraverso:
• Il numero di vertici;
• Il vettore delle ascisse dei vertici;
• Il vettore delle corrispondenti ordinate;
Definire un array dinamico A destinato a rappresentare N poligoni come richiesto
nell’esercizio precedente.
Come descrivo:
a. Il punto medio del terzo lato?
b. L’indirizzo dell’ascissa dell’ultimo lato?

ho pensato in realtà a due strutture, una per un punto in $RR^2$ ed una per il poligono vero e proprio
Codice:
struct puntoR2{
 float x;
 float y;
}
struct poligono{
 puntoR2* vertici;
 unsigned int n_vertici;
}

quindi il vettore di strutture sarebbe poligono A[N]. non so però gestire le richieste. come mi muovo tra i vertici?
qualche idea?
cooper
Cannot live without
Cannot live without
 
Messaggio: 2124 di 4642
Iscritto il: 25/07/2014, 09:19

Re: [C++] poligoni e strutture

Messaggioda vict85 » 19/09/2018, 20:13

Le tue strutture rispondono alle richieste del problema, anche se nel C++ si userebbe una classe con costruttore e cose simili.

Le richieste non hanno molto senso logico. Insomma, un poligono rimane lo stesso poligono se si ruotano i vertici. Detto questo cosa intendi con "muovere tra i vertici"? Insomma una volta allocato dinamicamente l'insieme dei vertici, il punto medio del terzo lato è:
Codice:
struct puntoR2
{
  float x, y;
};

struct poligono
{
  puntoR2 * vertici;
  unsigned int n_vertici;
};

puntoR2
punto_medio_terzo_lato(const poligono & p)
{
  puntoR2 punto = {0.0, 0.0};
  if (p.n_vertici > 3 && p.vertici)
    {
      punto.x = (p.vertici[3].x + p.vertici[2].x) * 0.5;
      punto.y = (p.vertici[3].y + p.vertici[2].y) * 0.5;
    }
  return punto;
}
vict85
Moderatore
Moderatore
 
Messaggio: 9389 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] poligoni e strutture

Messaggioda Super Squirrel » 19/09/2018, 21:34

Premesso che risulta fondamentale che i vertici siano "consecutivi", è necessario stabilire delle convenzioni:
- dal momento che i vertici sono salvati in un array, direi di identificare il singolo vertice con il corrispettivo indice (che andrà da 0 a n_vertici-1);
- per quanto riguarda gli n_vertici lati, identificherei l'i-esimo lato come il lato che ha come estremi il vertice i e quello consecutivo (ossia 0 se i=n_vertici-1 o i+1 altrimenti).

Il punto a) quindi è fatto. Per quanto riguarda il punto b) non so aiutarti, perché non so cosa si intende con "ascissa di un lato"!!
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 297 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] poligoni e strutture

Messaggioda cooper » 19/09/2018, 22:04

ancora grazie per l'aiuto.
vict85 ha scritto:Le richieste non hanno molto senso logico. Insomma, un poligono rimane lo stesso poligono se si ruotano i vertici.

esatto ed è quello che mi lasciava perplesso.
vict85 ha scritto:cosa intendi con "muovere tra i vertici"

intendevo che faticavo a capire come indicizzare i vertici e considerare le loro ascisse. la tua risoluzione comunque ha chiarito le idee, grazie!
Super Squirrel ha scritto:Premesso che risulta fondamentale che i vertici siano "consecutivi", è necessario stabilire delle convenzioni:
- dal momento che i vertici sono salvati in un array, direi di identificare il singolo vertice con il corrispettivo indice (che andrà da 0 a n_vertici-1);
- per quanto riguarda gli n_vertici lati, identificherei l'i-esimo lato come il lato che ha come estremi il vertice i e quello consecutivo (ossia 0 se i=n_vertici-1 o i+1 altrimenti).

Il punto a) quindi è fatto. Per quanto riguarda il punto b) non so aiutarti, perché non so cosa si intende con "ascissa di un lato"!!

grazie anche a te per l'intervento.
cooper
Cannot live without
Cannot live without
 
Messaggio: 2127 di 4642
Iscritto il: 25/07/2014, 09:19

Re: [C++] poligoni e strutture

Messaggioda Super Squirrel » 20/09/2018, 11:03

Super Squirrel ha scritto:- per quanto riguarda gli n_vertici lati, identificherei l'i-esimo lato come il lato che ha come estremi il vertice i e quello consecutivo (ossia 0 se i=n_vertici-1 o i+1 altrimenti).

Volendo evitare l'if si può anche scrivere che l''i_esimo lato avrà come vertici i e (i+1)%n_vertici.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 299 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] poligoni e strutture

Messaggioda apatriarca » 20/09/2018, 19:19

Esiste un metodo particolare per iterare sui lati di un poligono partendo dall'ultimo e poi seguendo tutti gli altri:
Codice:
for (end = 0, begin = n; end < n; begin = end, ++end) {
    // Codice per lavorare sul lato formato dai vertici begin --> end
}

Non fa uso di if o %. La principale ragione per mostrare questo codice è che si trova spesso in codici e algoritmi di geometria computazionale e può comunque tornare utile in altre situazioni simili.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5131 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite