Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Bouncing Balls
Obiettivo: creazione di un sistema particellare con simulazione di alcuni parametri fisici (gravità, attrito, urti tra particelle...)
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Impostazione lavoro
Adotteremo un approccio incrementale, aggiungendo feature ad ogni nuova versione
Caratteristiche iniziali oggetti: Dimensione Posizione VelocitàCaratteristiche iniziali ambiente: Gravità
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Struttura sketchClasse Ball descrive le palline e i loro
movimenti nello spazioMain definisce le proprietà
dell'ambiente tiene traccia delle palline in esso contenute tramite una lista dinamica
Alcune variabili di supporto: t: durata in s di un frame
(1/frameRate) ppm: pixel per metro
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Simulazione fisica - motoPresenza di gravità → moto accelerato
In realtà conviene risolvere l'accelerazione come cambio di velocità istantanea, considerando uniforme il moto tra un frame e il successivo
x= x0v 0 t12at 2
v=v 0at x= x0vt
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
La classe PVectorInserita nelle ultime versioni di
Processing all'interno della libreria standard, permette di gestire in maniera facile e veloce i calcoli vettoriali (sia 2D che 3D)
Moto pallina in 2 righe di codice! :)Void move(PVector field, float t) {
vel.add(PVector.mult(field,t));
pos.add(PVector.mult(vel,ppm*t));
}
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Versione 0: ultimi ritocchiAggiunta di semplice interazione:• Mouse click sx → crea pallina
Definizione di un limite superiore al numero di palline presenti (maxBalls)
CODICE
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Gestione collisioniDue possibili approcci:• A priori → Calcolo preciso dell'urto
con equazioni differenziali PRIMA che esso avvenga
• A posteriori → Gestione urto DOPO che esso è avvenuto
Ci concentreremo sul secondo poiché di più facile trattazione
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto con le paretiSe la distanza tra il centro della pallina
e la parete è inferiore al raggio, la componente della velocità perpendicolare alla parete viene invertita di segno e moltiplicata per un coeff. tra 0 e 1, che regola l'elasticità dell'urto
v n=−v n0⋅k bounce
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Fix upFase fondamentale nella collision
response a posteriori, corregge la compenetrazione tra oggetti (che è già avvenuta)
Parte delicatissima, nonché fonte di instabilità e comportamenti indesiderati
In genere si tratta di un processo per tentativi ed errori, alla ricerca di un risultato sufficientemente verosimile
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Rotolamento contro le paretiOgni volta che la pallina si trova in
contatto con una parete, la componente della velocità parallela alla parete viene decrementata del suo valore moltiplicato per un coefficiente d'attrito tra 0 e 1
v p=v p0−v p0⋅k roll
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Versione 1: ultimi ritocchiAggiunta rotazione del campo
gravitazionale
Aggiunta di un semplice puntatore triangolare per indicare la direzione del campo gravitazionale
CODICE
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto tra particelleE' la parte più complessa, sia a livello
concettuale che computazionalePer ogni pallina si calcola la distanza
con ogni altra pallina, e se essa è minore della somma dei raggi c'è una collisione
La complessa interazione tra gli oggetti è approssimata calcolando singolarmente gli urti per ogni coppia di palline
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto elastico (masse uguali)E' la parte più complessa, sia a livello
concettuale che computazionalePer ogni pallina si calcola la distanza
con ogni altra pallina, e se essa è minore della somma dei raggi c'è una collisione
La complessa interazione tra gli oggetti è approssimata calcolando singolarmente gli urti per ogni coppia di palline
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto elastico (masse uguali)1. E' comodo cambiare sistema di
riferimento e considerare fermo uno dei due oggetti, sottraendo la sua velocità a entrambe le entità in gioco
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto elastico (masse uguali)2. La velocità dell'oggetto in moto viene
scomposta rispetto all'angolo di incidenza dell'urto
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto elastico (masse uguali)3. La componente normale è la velocità
finale dell'oggetto inizialmente fermo, mentre l'altra componente è la velocità finale dell'oggetto in collisione
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
Urto elastico (masse uguali)4. Occorre infine tornare al vechio
sistema di riferimento, aggiungendo a entrambi gli oggetti la velocità iniziale di quello che avevamo “fermato”
CODICE
Corso di Laurea in Comunicazione DigitaleCorso di Realtà Virtuali - a.a. 2009/10Prof. Paolo PasterisTutor: Stefano Baldan
Bouncing Balls
E se le masse non sono uguali?Se l'urto è elastico ma le masse non
sono uguali, allora è il momento che si conserva, mentre consideriamo fermo il centro di massa
Per ulteriori approfondimenti:http://en.wikipedia.org/wiki/Center_of_momentum_frame
CODICE FINALE
Top Related