Salve a tutti,
sto seguendo un tutorial per le collisioni su un ipotetico gioco di biliardo in silverlight.

La routine che controlla le collisioni e quindi gli effetti degli urti però ha una parte che non riesco proprio a capire.
La sub controlla una palla e un altra palla e si trova all interno della classe della palla stessa. Quindi controlla la collisione tra la palla appartenente alla stessa classe ( this ) e l' altra palla passata sempre come oggetto/classe "Palla" nel parametro b.
Le variabili _x e _y sono le coordinate x e y delle palle.
Le variabili _vx e _vy non sono altro che le coordinate x e y del vettore di direzione quindi descrivono il movimento della palla ( sono generati dal coseno e seno dell angolo ).

Detto ciò la sub è la seguente:

public bool DoCollide(Ball b)
2: {
3: // calculate some vectors
4: double dx = this._x - b._x;
5: double dy = this._y - b._y;
6: double distance2 = dx * dx + dy * dy;
9:
10: if (Math.Abs(dx) > this._d || Math.Abs(dy) > this._d)
11: return false;
12: if (distance2 > this._d2)
13: return false;

OK FIN QUI HO CAPITO; HO CALCOLATO SE LE DISTANZE SONO TALI DA GENERARE UNA COLLISIONE. SIA LE DISTANZE TRA LE COORDINATE CHE L EFFETTIVA DISTANZA TRA I DUE CENTRI DELLE SFERE.
LA PARTE OSCURA E' LA SEGUENTE:


13:  double dvx = this._vx - b._vx;
14: double dvy = this._vy - b._vy;
15: // make absolutely elastic collision
16: double mag = dvx * dx + dvy * dy;
17:  
18: // test that balls move towards each other
19: if (mag > 0)
20: return false;
21:  
22: mag /= distance2;
23:  
24: double delta_vx = dx * mag;
25: double delta_vy = dy * mag;
26:  
27: this._vx -= delta_vx;
28: this._vy -= delta_vy;
29:  
30: b._vx += delta_vx;
31: b._vy += delta_vy;
32:  
33: return true;
34: }

non capisco le formule che ha applicato e perchè... so solo che funziona!! Ma non mi basta che funzioni voglio capire il perchè... qualcuno ha qualche idea??

Per il tutorial completo vi rimando qui:

http://blogs.msdn.com/coding4fun/archive/2007/09/19/5002772.aspx

grazie a tutti coloro che mi aiuteranno.
Modificato da ancio il 28 giugno 2009 17.35 -
Modificato da ancio il 28 giugno 2009 17.39 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC