Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-10-2006, 17: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, 17: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, 17: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, 18: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, 18: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, 18: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, 18: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, 18: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, 19: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, 21:49   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
Xò se il raggio creato è tangente al poligono non funziona
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 26-10-2006, 08: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, 11: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, 20:27   #13
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2787
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, 20: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, 21: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, 23: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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Missione Artemis II diretta verso la Lun...
Toy Story 5 arriva al cinema: è l...
Intel cambia rotta su Linux? Nuove assun...
Samsung aggiorna Bixby con One UI 8.5: p...
L'Etiopia vieta le auto a combustione: a...
Pirateria audiovisiva: la Guardia di Fin...
Ubisoft conferma due nuovi Far Cry in sv...
Chi vincerà il Festival di Sanrem...
G42 e Cerebras portano in India un super...
Offerte aggiornate del weekend Amazon: 7...
4 MacBook Air in offerta e scende a 939€...
Chrome cambia il tuo modo di lavorare: o...
Minimo storico iPhone 17 su Amazon: 909€...
USA, incriminati tre ingegneri della Sil...
Xbox: Phil Spencer lascia dopo 38 anni, ...
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: 02:45.


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