Oppure

Loading
14/02/12 20:42
genni_96
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
aaa
15/02/12 18:49
subazu
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ò ;-)
aaa
15/02/12 20:08
genni_96
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.
aaa
15/02/12 21:39
pierotofy
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) ( en.wikipedia.org/wiki/… )

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 15/02/12 21:44
Il mio blog: piero.dev
16/02/12 6:42
genni_96
Grazie, credo di aver capito, appeno ho tempo provo a scrivere il codice. Spero di riuscirci senza altri problemi.
aaa
17/02/12 13:57
TheKaneB
@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:
aaa
17/02/12 15:51
genni_96
Grazie mille, ho appena finito di scrivere il codice e funziona perfettamente:k::k:
aaa