Test di intersezione del riquadro di delimitazione allineato agli oggetti 2D


9

Ho due rettangoli allineati agli oggetti (cioè non allineati agli assi, ruotano con l'oggetto). Vorrei sapere se due caselle allineate agli oggetti si sovrappongono. ( Modifica: nota - Sto usando un test del riquadro di selezione allineato agli assi per scartare rapidamente gli oggetti distanti, quindi non importa se la routine quad è un po 'più lenta. )

Le mie scatole sono memorizzate come quattro punti x, y. Ho cercato le risposte, ma non riesco a dare un senso ai nomi delle variabili e agli algoritmi negli esempi per applicarle al mio caso particolare.

Qualcuno può aiutarmi a mostrarmi come sarebbe fatto, in modo chiaro e semplice? Grazie. (La lingua particolare non è importante, lo pseudo codice in stile C è OK.)

Risposte:


5

Se sai dove cercare è facile. Stai cercando un riflesso. Vai qui: http://www.realtimerendering.com/intersections.html .
Lì troverai il link a questo sito http://www.geometrictools.com/LibMathematics/Intersection/Intersection.html
e troverai il codice corretto. (ctrl + f "Intersezione di caselle (2D)")

Utilizza SAT e contiene codici sorgente e articoli.


L'algoritmo descritto dagli strumenti geometrici è quello che avrei indicato.
Jari Komppa,

Capisco che questo è stato 4 anni fa, ma spiega sempre un downvote e tutto il resto. Questo è piuttosto "La tua risposta è in un altro castello", e ora la risposta non sembra nemmeno essere lì nel secondo caso.
Yann,

2

Il modo più semplice è probabilmente testare ciascun vertice della casella B contro ciascun lato della casella A (calcolare la distanza segnata). In questo modo puoi classificare ciascun vertice come "davanti" o "dietro" il segmento.

Se tutti i vertici di B si classificano come "davanti" a uno dei segmenti di A, B e A non si sovrappongono; altrimenti lo fanno.

Questo è in qualche modo coinvolto, quindi potresti ottenere un certo guadagno prestazionale facendo prima un controllo cerchio-cerchio, usando i cerchi di delimitazione dei quadrati (banale da calcolare)


Per prima cosa sto eseguendo un test del riquadro di delimitazione allineato all'asse per scartare rapidamente oggetti distanti ... hai ulteriori dettagli sul test quad-quad?
AshleysBrain

ruota temporaneamente entrambi i quad con la stessa trasformata in modo che uno di essi finisca con l'asse allineato ... quindi usa il test SAT come indicato sopra. quando viene trovato il risultato, invertire la rotazione per ripristinarli.
Steve H,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.