Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-10-2006, 16:23   #1
cavay
Member
 
Iscritto dal: Sep 2001
Messaggi: 181
Punto apparteente ad un poligono

Salve a tutti,

sto implementando un prodotto scritto in c++ e mi servirebbe conoscere l'appartenenza di un punto ad un poligono.
Mi spiego meglio: dato un poligono P2D e dato un punto Pnto di coordinate (X,Y) mi interessa conoscere se tale punto cade nel poligono.
Sono riuscito a farlo solo per i poligoni convessi (ogni angolo interno è < 180 gradi), ma proprio non riesco per quelli concavi.(http://www.itportal.it/developer/vb/...ni/default.asp)

Qualcuno saprebbe aiutarmi?
cavay è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 16:33   #2
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
ciao, mi sono trovato ad affrontare lo stesso problema, ma ci ho solo pensato, niente implementazioni... l'idea è di tipo brute-force, quindi non so quanto sia efficiente. Però ogni lato del poligono induce una disequazione del tipo ax + by + c >= 0 (oppure <=), dove l'uguale lo metti solo se la frontiera del poligono fa parte del poligono stesso. il segno della disuguaglianza dipende dal particolare lato (credo). ora, per vedere se un punto qualsiasi appartiene al poligono, le sue coordinate devono verificare TUTTE le disuguaglianze indotte dai lati del poligono.

spero di esserti stato utile.

mad_hhatter
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 16:49   #3
cavay
Member
 
Iscritto dal: Sep 2001
Messaggi: 181
Scusami ma non mi è chiaro, forse avro posto male il problema.
Allora, semplifichiamo le cose e pensiamo ad un quadrato ABCD, dove:
A(0,0), B(5,0), C(5,5), D(0,5) e prendiamo in cosiderazione il pnto E(3,3) che appartiene al poligono e il punto F(6,6) che non appartiene. Come applicheresti il tuo algoritmo?



P.S.
Stiamo parlando di poligoni di 50 punti e non di 4.
cavay è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 17:04   #4
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
supponi di avere una rappresentazione ordinata dei vertici del poligono, in modo che se la lista è A,B,C,D allora percorrendo i punti in tale ordine percorro il poligono in senso orario o antiorario (è indifferente). Se invece hai solo un elenco disordinato la cosa si fa problematica. Cmq, posto di avere tale ordinamento, puoi prendere i punti a 2 a 2 e ottenere l'equazione della retta di ciascun lato. ora una retta ha equazione ax+by+c = 0. se tu prendi la diseguaglianza ax+by +c >= 0 descrivi il semipiano generato dalla retta ax+by+c=0. Ora, l'intersezione dei semipiani associati a tutti i lati dà la porzione di spazio che definisce il poligono stesso. l'unica cosa è che bisogna vedere come definire il segno della disuguaglianza per considerare il semipiano giusto.

scrivendo le disuguaglianze per tutti i lati ottieni un sistema di N disuguaglianze. se un punto le verifica tutte, allora sei certo che cadenel poligono.
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 17:11   #5
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
no, lascia perdere tutto, con i poligoni concavi non funziona!!! sono un idiota, mi dispiace.

perchè allora non suddividere un poligono concavo in sottopoligoni convessi(al peggio triangoli) e verificare se il punto appartiene a uno di essi? in questo modo puoi sfruttare l'algoritmo che hai già perchè lavoreresti con poligoni convessi
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 17:19   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
FruGOOGLa per "Jordan Curve Theorem". Dato un punto crei un raggio in una direzione arbitraria e conti il numero di intersezioni tra quel raggio e i lati del poligono. Se il totale è dispari, il punto si trova nel poligono. Se è pari, il punto è fuori dal poligono.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 17:31   #7
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
geniale, sei un mito
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 17:34   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ma che geniale, io non so manco perchè funziona L'ho solo letto su un libro.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 18:46   #9
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
beh funziona perchè un poligono è una linea chiusa e se parti dall'esterno, ogni volta che fai un attraversamento in uscita devi per forza averne fatto uno in entrata, mentre se parti dall'interno hai un attraversamento in uscita più 0 o più coppie di attraversamenti uscita-entrata, uno per ciascuna concavità che incontri...

è un metodo geniale nella sua semplicità
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2006, 20:49   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Xò se il raggio creato è tangente al poligono non funziona
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 07:52   #11
cavay
Member
 
Iscritto dal: Sep 2001
Messaggi: 181
Quote:
Originariamente inviato da PGI-Bis
FruGOOGLa per "Jordan Curve Theorem". Dato un punto crei un raggio in una direzione arbitraria e conti il numero di intersezioni tra quel raggio e i lati del poligono. Se il totale è dispari, il punto si trova nel poligono. Se è pari, il punto è fuori dal poligono.
Il Teorema lo conosco ma non funziona se il raggio interseca un lato del poligono in un vertice.
Per adesso è cosi' che l'ho implementato, aggiungendo dei controlli in +, ma computazionalmente non è leggero.
cavay è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 10:22   #12
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
beh, quel metodo credo non possa essere alleggerito piu di tanto: tu cerchi le intersezioni con TUTTI i lati del poligono?

perche' se interseca in un vertice non funziona?
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 19:27   #13
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Non funziona se il raggio è tangente al poligono in qualche suo punto perchè invece di contare 1 x l'entrata e 1 x l'uscita conta solo 1
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 19:38   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Credo che sia sufficiente prendere come raggio la distanza fra il punto ed il vertice più lontano aumentata di uno Che tra l'altro è anche una cosa che si fa abbastanza facilmente...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 20:00   #15
Slide
Senior Member
 
L'Avatar di Slide
 
Iscritto dal: Mar 2006
Messaggi: 1377
Ricerca operativa.. che incubo di esame è stato per noi Un prof. che a lezione ci insultava solamente senza spiegare poi molto.

Se vi vedete per ripassare, chiamatemi!
Slide è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 22:04   #16
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da cionci
Credo che sia sufficiente prendere come raggio la distanza fra il punto ed il vertice più lontano aumentata di uno Che tra l'altro è anche una cosa che si fa abbastanza facilmente...
perche' aumentata di uno?

il fatto e', cmq, che per qualsiasi vertice io possa prendere mi viene in mente un controesempio: una forma particolare del poligono per cui l'algoritmo PUO' fallire... forse bisognerebbe provare piu' vertici... oppure prendere 2 vertici consecutivi e prendere il raggio passante per un punto appartenente al lato da essi individuato. e se per caso tale lato risulta parallelo al raggio (nel caso in cui i 2 punti siano allineati con il punto da testare), cambio uno dei due vertici
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v