|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2004
Città: Nord-Est
Messaggi: 5160
|
[C++] Dati N punti, come trovo quelli che compongono il perimetro?
Edit: risolto...
Ultima modifica di Abadir_82 : 01-02-2008 alle 10:43. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
non capisco se intendi trovare l'equazione di tutti i punti sul perimetro, o se vuoi solo misurarlo (facendo la somma dei lati). in ogni caso non capisco: tu stai parlando di punti interni o esterni a cosa? al poligono? non credo, visto che il perimetro è "di frontiera"...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
Credo che intenda una cosa del tipo: dato un insieme di punti sul piano tracciare il poligono più grande (area) che abbia come vertici un sottoinsieme dei punti dati e che racchiuda tutti gli altri punti non facenti parte dell'insieme dei vertici. E' questo oppure ho detto una vaccata? Edit: infatti! Sono interessato al problema! |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Feb 2004
Città: Nord-Est
Messaggi: 5160
|
Quote:
Ho cancellato perche' pensavo che non fosse di interesse, un po' come quello dell'altro giorno del fare l'xcopy con funzioni di windows. No, il problema era: dati N punti del piano tracciare il poligono che li inglobi tutti e che abbia area massima. Devo ancora implementare il codice, pero' ti posto la soluzione che usero', magari ti viene utile. - Cerchi il punto con coordinata Y maggiore. - Tracci tutte le rette tra quel punto e gli altri e guardi il valore dell'angolo che formano con l'asse X. La retta che forma l'angolo piu' grande identifica il prossimo punto (contando di andare in senso orario). Se vuoi vedere il punto precedente ti basta cercare la retta che forma l'angolo piu' piccolo. Per verificare l'appartenenza di un punto ad un poligono, cosa che credo di serva, traccia le rette tra quel punto ed i vertici, identifica gli angoli e sommali. Se la somma e' pari a 360 allora il punto fa parte del poligono. |
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Chiedo perchè con l'espressione "che li inglobi" a me era venuto da pensare che il poligono risultante potesse anche utilizzare solo un sottoinsieme di detti punti per tracciare il suo contorno purchè al suo interno "inglobasse" anche gli altri; a quel punto avrebbe avuto anche un senso il vincolo dell'area maggiore dato che si potevano generare più poligoni diversi. La tua soluzione funziona ma se l'ho capita bene è anche l'unica soluzione perchè genera l'unico poligono in quanto deve usare tutti i punti come vertici di definizione del suo contorno @EDIT: mi correggo, non è l'unico poligono possibile, mi sono sbagliato. Confrontando gli angoli puoi anche implementare facilmente un algoritmo che ti sappia dire se il tuo poligono è concavo o convesso proprio con una verifica dell'andamento degli angoli dei segmenti che i vertici del suo contorno, ordinati in senso antiorario (o orario) formano... @EDIT: Quote:
Ultima modifica di banryu79 : 01-02-2008 alle 15:03. |
||
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Feb 2004
Città: Nord-Est
Messaggi: 5160
|
Quote:
Con ingloba intendo il fatto che il punto stia nell'area racchiusa dal poligono, ma non necessariamente sul perimetro. Come giustamente hai detto si va da un minino di 3 punti per il perimetro e tutti gli altri interni ad un massimo di infiniti punti per il perimetro e nessuno interno. A me basta prendere quello piu' grande, non mi serve controllare concavo o convesso. Il link per vedere l'appartenenza ad un poligono invece lo guardo, puo' sempre far comodo. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Purtroppo ho finito l'Universita' da troppi anni per ricordarmi l'algoritmo.
E' comunque un problema noto, che ha interessato diversi ricercatori nel corso degli anni. Quando ho questo tipo di problemi da risolvere, consulto delle librerie di algoritmi. Magari puoi confrontare la tua soluzione con una di quelle riportate. Non ho visto il link di banryu79, ma puoi controllare il libro di Sedgewick "Algorithms in C", penso che esista anche la versione italiana. Oppure puoi controllare i libri di Knuth. Li trovi in tutte le librerie e probabilmente anche on line. Se fai lo sviluppatore per professione, ti consiglio di comprarti una copia di questi libri, ti semplificano la vita.
__________________
In God we trust; all others bring data |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
|
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Feb 2004
Città: Nord-Est
Messaggi: 5160
|
Quote:
Purtroppo sono in Olanda per lavoro e libri di algoritmi non ne ho sottomano. Ad ogni modo tutto risolto No no, sono qua solo per altri 3 mesi per il progetto Leonardo. Ultima modifica di Abadir_82 : 01-02-2008 alle 20:03. |
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
anche questo è vero, ma se è di area massima allora il problema non è ben posto perché potrebbe trattarsi di un poligono arbitrariamente grande e non avrebbe senso. bisognerebbe specificare che gli angoli del poligono devono essere un sottoinsieme dei punti dati (magari era specificato nel post cancellato).
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ecco un altro link utile per gli interessati --> Point In Polygon Strategies
[link presente nella pagina web di cui ho postato il ink nel post #6] |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 329
|
Ora ho capito cosa intendevi nell'altro topic quando parlavi di ordinamento dei punti
C'ho pensato su un attimo pure io e penso che l'ideale sia definire una funzione di costo come combinazione lineare di area e perimetro. Generare una lista di triangoli che coprono tutta la lista di punti e che non intersecano tra di loro. Calcolare l'area come somma delle aree dei triangoli e il perimetro come somma delle lunghezze dei lati che appartengono a un solo triangolo. Poi valutare l'eliminazione dei triangoli che portano a un miglioramento della funzione di costo a patto che ogni vertice appartenga ad almeno due tringoli diversi. Alla fine elencare in ordine solo i lati che appartengono a un solo triangolo. Intuitivamente io avrei fatto così. Lavorare solo con l'area o solo con il perimetro porta a qualche incoveniente in alcuni casi particolari (vedi perimetri frastagliati per minimizzare l'area o aree troppo grandi per minimizzare il perimetro). Ciao |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
ll calcolo dell' inviluppo convesso e' un problema noto e piu' che studiato.
Algoritmi per la sua soluzione si dovrebbero trovare in un comune testo di algoritmi (appunto) oppure, se uno e' pigro, su wikipedia
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:21.




















