Ce lo avete un modo per trovare un punto dentro un poligono?
L'altroieri per questioni professionali mi sono imbattuto nel problema di stabilire computazionalmente un qualsiasi punto interno di un poligono. Supponiamo che vi si dia un poligono P costituito da N vertici: voi dovete rispondere con P_int, cioè dovete dotarmi di una procedura computazionale (cioè un algoritmo) che consenta di stabilire le coordinate di un punto (P_int) che si è certi essere contenuto nel poligono e non sul bordo. Tengo a precisare che la procedura deve funzionare con un qualsiasi poligono, cioè anche con uno concavo, altrimenti è troppo facile.
Nel caso di un poligono convesso, la soluzione sarebbe semplicemente di rispondere con la formuletta del calcolo del centroide (punto medio tra tutti i vertici) o del baricentro.
Tra le varie ipotesi fantasiose, verosimili ed inverosimili, la più stupida che ho trovato nella rete è stata questa: "basta guardarlo il poligono e indicare un punto interno". A dir poco geniale!
Le soluzioni algoritmiche più comuni a questa problematica si basano di solito sul ragionamento dell'attraversamento: provo ad attraversare il poligono. Alla prima intersezione entro nel poligono, alla successiva esco. Se il poligono è convesso, sono sicuro che entro una sola volta ed esco una sola volta. Se il poligono è concavo, a seconda della retta di attraversamento, potrei entrare ed uscire più volte, pertanto basta contare il numero di volte che ho incontrato un segmento del perimetro per dire se sono dentro o fuori. Se ne ho già incontrato un numero dispari di segmenti, mi trovo dentro il poligono; se invece ho incontrato i segmenti del poligono per un numero pari di volte, sono certamente fuori.
In una versione algoritmica la cosa difficile è proprio stabilire bene una buona retta di attraversamento:
- costruisco il bounding box (rettangolo contenitore) che contiene completamente il poligono (AABB)
- stabilisco un punto di prova che si trova dentro uno degli quattro quadranti al di fuori del bounding box: tale punto è sicuramente fuori dal poligono
- stabilisco la retta di attraversamento congiungendo tale punto ed il centro del bounding box
- determino tutte le intersezioni tra i segmenti del poligono e la retta di attraversamento
- se ho scelto opportunamente la retta di attraversamento, avrò sicuramente almeno un paio di intersezioni
- il risultato della computazione, cioè la risposta al problema, è il punto medio tra la prima e la seconda intersezione
Questo approccio algoritmico è però da evitare, perché potrebbe essere necessario dover cambiare la retta di attraversamento alcune volte. In più la retta di attraversamento potrebbe incrociare "malamente" qualche segmento, perché le è esattamente parallela, con tutti i problemi del caso. In tal caso non riusciamo a stabilire se l'intersezione che non è puntuale, ma è a tutti gli effetti un segmento vero e proprio, ci faccia entrare o uscire dal poligono. La gestione di questa casistica porterebbe a scrivere del codice specifico e comunque saremmo in presenza di approssimazioni nella valutazione dell'intersezione tra due segmenti pressoché paralleli.
Ce l'avete voi un'idea migliore per trovare una semplice soluzione al problema? Vi dico subito che c'è - è elegante e molto affascinante - e che l'ho già implementata, però ve la espongo più avanti.
Io proverei con il metodo della circonferenza inscritta al bounding box ...
Di
Nic
(inviato il 12/01/2012 @ 13:58:49)
Esplicita un po' meglio, Nic. Stai parlando del punto di scelta con cui individuare la retta di attraversamento?
Di
MT
(inviato il 12/01/2012 @ 14:35:56)
Questo è un classico problema risolto dalla Geometria Computazionale. L'algoritmo e le strutture dati sono abbastanza complicate ma il risultato è robusto!
Di
natan
(inviato il 23/01/2015 @ 20:39:58)
search engine optimization pricing
Di
Wendell
(inviato il 12/11/2022 @ 06:20:35)
seo packages for small Business
Di
Kerrie
(inviato il 17/11/2022 @ 23:40:45)
Sergio
Di
Finlay
(inviato il 04/12/2022 @ 23:46:31)
Car Diagnostic
Di
Maximo
(inviato il 07/12/2022 @ 19:14:58)
car key remote Control repair
Di
Tanesha
(inviato il 07/12/2022 @ 23:07:26)
Asbestos Lawyer
Di
Sherry
(inviato il 08/12/2022 @ 14:14:42)
Mesothelioma Settlement
Di
Francesca
(inviato il 10/12/2022 @ 02:00:44)
Mesothelioma Case
Di
Phillis
(inviato il 11/12/2022 @ 09:52:25)
Asbestos claim
Di
Shawna
(inviato il 11/12/2022 @ 14:32:02)
Demo Slot
Di
Aileen
(inviato il 15/12/2022 @ 16:34:44)
https://www.sunseteyewear.co.id/profile/erssanigita/profile
Di
Willy
(inviato il 15/12/2022 @ 17:04:11)
akun demo Slot
Di
Otto
(inviato il 15/12/2022 @ 17:59:33)
slot Demo gratis
Di
Davida
(inviato il 15/12/2022 @ 18:03:07)
Akun Demo slot
Di
Harold
(inviato il 15/12/2022 @ 20:11:22)
akun Demo slot
Di
Carina
(inviato il 15/12/2022 @ 22:11:58)
Akun Demo slot
Di
Flossie
(inviato il 15/12/2022 @ 22:17:20)
Slot demo
Di
Isiah
(inviato il 16/12/2022 @ 00:31:10)
Susana
Di
Guy
(inviato il 16/12/2022 @ 19:01:00)
https://ironworksfitness.org/
Di
Leo
(inviato il 17/12/2022 @ 00:53:14)
grimwolf.net
Di
Rory
(inviato il 17/12/2022 @ 01:48:38)
Ftsfnigeria.Org
Di
Antoine
(inviato il 17/12/2022 @ 04:14:29)
purplemiddleway.org
Di
Margene
(inviato il 17/12/2022 @ 11:50:04)
harvesttruck.org
Di
Maisie
(inviato il 17/12/2022 @ 12:20:16)
rcyf.net
Di
Nancy
(inviato il 17/12/2022 @ 14:48:55)
Mycrashcourse.Net
Di
Carmela
(inviato il 17/12/2022 @ 16:42:11)
Smc2012.org
Di
Earnest
(inviato il 17/12/2022 @ 19:14:31)
Https://Rraft.Org
Di
Marta
(inviato il 17/12/2022 @ 21:02:23)
https://emilyobrien.net/
Di
Benny
(inviato il 17/12/2022 @ 22:45:02)
codoli.org
Di
Amanda
(inviato il 18/12/2022 @ 17:16:06)
Poker Online
Di
Elizbeth
(inviato il 27/12/2022 @ 14:05:55)
Lottery hongkong
Di
Milo
(inviato il 27/12/2022 @ 22:09:56)
Juliet
Di
Trina
(inviato il 27/12/2022 @ 22:34:01)
ha-ber.Net
Di
Reva
(inviato il 27/12/2022 @ 23:10:48)
Valerie
Di
Elvera
(inviato il 29/12/2022 @ 02:42:59)
poker
Di
Vanessa
(inviato il 29/12/2022 @ 07:42:23)
slot
Di
Colleen
(inviato il 29/12/2022 @ 08:21:31)
togel singapore lottery
Di
Jann
(inviato il 29/12/2022 @ 08:38:02)
https://thinkgeek.org
Di
Felix
(inviato il 29/12/2022 @ 11:56:10)
pragmatic Play
Di
Juliet
(inviato il 29/12/2022 @ 18:29:45)
Efrain
Di
Michel
(inviato il 30/12/2022 @ 02:43:41)
Novaeco.Ru
Di
Ashly
(inviato il 07/01/2023 @ 20:54:02)
hemp Online
Di
Kazuko
(inviato il 11/01/2023 @ 05:03:39)
asbestos Lawsuit
Di
Kala
(inviato il 11/01/2023 @ 08:19:00)
Abbey
Di
Mohammed
(inviato il 11/01/2023 @ 18:39:40)
Commercial door repair
Di
Latanya
(inviato il 11/01/2023 @ 19:26:16)
mymobilityscooters.co.uk
Di
Mellissa
(inviato il 12/01/2023 @ 03:40:58)
Sasha
Di
Calvin
(inviato il 12/01/2023 @ 09:03:10)
Tesco sim only deals uk
Di
Odette
(inviato il 13/01/2023 @ 00:34:27)
deals
Di
Christin
(inviato il 13/01/2023 @ 03:03:26)
Mesothelioma settlement
Di
Marie
(inviato il 14/01/2023 @ 00:21:19)
Ghost alarm Fitting
Di
Wilford
(inviato il 14/01/2023 @ 02:00:42)
Masturbators For men
Di
Shavonne
(inviato il 14/01/2023 @ 05:31:16)
gurupin.co.kr
Di
Irish
(inviato il 14/01/2023 @ 06:29:44)
Windows
Di
Mahalia
(inviato il 14/01/2023 @ 08:58:45)
Heike
Di
Marcus
(inviato il 14/01/2023 @ 09:03:00)
https://realgirls.fun/bettyebrifma
Di
Ian
(inviato il 14/01/2023 @ 09:47:59)
https://Realgirls.fun/kennithdelit
Di
Lawanna
(inviato il 14/01/2023 @ 10:36:14)
delta 8 hemp flowers
Di
Alvaro
(inviato il 14/01/2023 @ 12:08:43)
asbestos Attorney
Di
Allison
(inviato il 14/01/2023 @ 13:15:36)
Disclaimer L'indirizzo IP del mittente viene registrato, in ogni caso si raccomanda la buona educazione.
|