Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Collisione raggio-triangolo
Forum - C/C++ - Collisione raggio-triangolo

Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 21:42
Martedì, 14/02/2012
Salve a tutti, ho un altro problema.
Ho incominciato da poco a fare la fisica dei miei videogiochi e avrei bisogno di una mano. Sto cercando di gestire le collisioni e finora ne ho gia fatte alcune, come quella raggio-sfera, o sfera-sfera e non ho avuto nessun problema. Ora sto cercando di trovare il punto di collisione tra un raggio ed un triangolo.
Ho cercato su internet ed ho trovato alcune cose, ma ho le idee abbastanza confuse, c'è qualcuno così gentile, da spiegarmi in modo semplice l'algoritmo da utilizzare?? Grazie

PM Quote
Avatar
subazu (Normal User)
Rookie


Messaggi: 35
Iscritto: 06/08/2011

Segnala al moderatore
Postato alle 19:49
Mercoledì, 15/02/2012
Penso che intanto puoi controllare che la distanza tra i 3 punti del triangolo e il centro del cerchio non sia minore del raggio del cerchio.
Poi puoi usare la formula della distanza fra un punto ed una retta e cercare di tirar fuori delle conclusioni mettendo in relazione i 3 risultati e il raggio.
E' solo un ipotesi però ;-)

PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 21:08
Mercoledì, 15/02/2012
Scusa, forse non mi sono spiegato bene. Per raggio non intendo il raggio di un cerchio ma una linea, definita dal punto di origine e un vettore normalizzato che ne rappresenta la direzione.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:39
Mercoledì, 15/02/2012
Ci sono diversi modi, provero' a spiegarti uno dei piu' semplici:

Usando coordinate baricentriche, (leggi su wikipedia) un punto in un triangolo A, B, C (gli spigoli del triangolo) e' definito da:

p = kA + i(B - A) + j(C - A)

Esiste inoltre una proprieta' che in questo contesto detta che:

i + j + k = 1

Muovendo i componenti un pochino:

k = 1 - i - j

Quindi si puo' riformulare p come:

p = kA + i(B - A) + j(C - A)          
   = (1 - i - j)A + i(B - A) + j(C - A)           [sostituzione]

Un'altra proprieta' delle coordinate baricentriche dice che un punto p e' all'interno di un triangolo solo se:

0 < i < 1
0 < j < 1
0 < k < 1

Diversi punti p possono essere generati utilizzando l'equazione parametrica:

p = (Origine del raggio) + t * (direzione del raggio)
dove t e' un numero reale (e ti permette di calcolare diversi punti sulla linea) ( http://en.wikipedia.org/wiki/Parametric_equation#Usefulness )

Sostituendo p:

(Origine del raggio) + t * (direzione del raggio) = (1 - i - j)A + i(B - A) + j(C - A)


Facendo un sistema di equazioni per ogni componente degli spigoli del triangolo, otteniamo 3 equazioni per 3 incognite (t, i, j).

(Componente X Origine del raggio) + t * (Componente X direzione del raggio) = (Componente X di A) + i( (Componente X di B) - (Componente X di A) ) + j( (Componente X di C) - (Componente X di A) )

E altre due equazioni dove il componente e' Y e Z.

Per risolvere il sistema puoi utilizzare il sistema di Cramer (Wikipedia).

Dopo che avrai trovato t, i e j:

if i < 0 or i > 1
  return false
if j < 0 or j > (1 - i)
  return false

else
  return true

Con il valore di t, puoi riutilizzare l'equazione parametrica per calcolare l'esatta posizione dell'impatto.

Non credo il discorso si possa semplificare piu' di questo...

Ultima modifica effettuata da pierotofy il 15/02/2012 alle 22:44


Il mio blog: https://piero.dev
PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 7:42
Giovedì, 16/02/2012
Grazie, credo di aver capito, appeno ho tempo provo a scrivere il codice. Spero di riuscirci senza altri problemi.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:57
Venerdì, 17/02/2012
@Piero:
meno male che ci sei tu :)
ero tentato di rispondere ma non mi andava proprio di postare tutto lo spiegone geometrico così ho desistito :rofl:

PM Quote
Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 16:51
Venerdì, 17/02/2012
Grazie mille, ho appena finito di scrivere il codice e funziona perfettamente:k::k:

PM Quote