Ho un poligono (a volte convesso, ma spesso concavo) e un mucchio di cerchi con raggi diversi. Come posso sapere se un cerchio si interseca / si sovrappone al poligono?
Potrei dividere il mio poligono concavo in pezzi convessi. Sarebbe d'aiuto?
Ho un poligono (a volte convesso, ma spesso concavo) e un mucchio di cerchi con raggi diversi. Come posso sapere se un cerchio si interseca / si sovrappone al poligono?
Potrei dividere il mio poligono concavo in pezzi convessi. Sarebbe d'aiuto?
Risposte:
ci sono due casi di questo problema. Il primo è l'intersezione e il secondo che si sovrappone (contenente).
Primo (intersezione / poligono all'interno del cerchio):
Trova il punto più vicino su ogni bordo del poligono rispetto al centro del cerchio. Se la distanza tra il punto più vicino al centro è inferiore al raggio, si ottiene l'intersezione o la sovrapposizione.
Secondo (il cerchio è intero in poligono): scatta un raggio dal centro del cerchio a destra (o sinistra / su / giù) e conta le intersezioni raggio / segmento (bordi poligonali). Se il conteggio delle intersezioni è pari, il cerchio è esterno al poligono. Se il suo strano cerchio è dentro.
Condividerò picter dalla lezione per questo caso:
E prenditi cura dei casi singolari.
Spero che questo possa aiutare.
modifica: penso che sia giusto aggiungere crediti all'immagine. L'autore è Petr Felkel, assistente professore all'Università tecnica ceca di Praga
Il primo passo, come indovini, è quello di dividere il poligono concavo in più convessi. La ragione di ciò è che userai il teorema dell'asse di separazione , che funziona solo su poligoni convessi.
SAT di per sé funziona solo su due poligoni convessi. L '"asse di separazione" nel nome si riferisce agli assi perpendicolari ai bordi del poligono. Le cerchie, sfortunatamente, ne hanno un numero infinito. Tuttavia, si scopre che esiste un modo abbastanza semplice per scoprire quali di questi assi sono rilevanti, osservando ciò che si proietta verso l'esterno per intersecare i vertici del poligono.
Invece di esaminare l'intero algoritmo qui, il software Metanet (creatori di N / N +) ha un buon tutorial sul rilevamento delle collisioni usando SAT , la terza sezione della quale copre SAT quando uno degli oggetti è un cerchio .
Ecco cosa faccio.