Bouncing Balls
Obiettivo: creazione
di un sistema
particellare con
simulazione di
alcuni parametri
fisici (gravità,
attrito, urti tra
particelle...)
Corso di Laurea in Bouncing Balls
Comunicazione Digitale
Impostazione lavoro
Adotteremo un approccio incrementale,
aggiungendo feature ad ogni nuova
versione
Caratteristiche iniziali oggetti:
 Dimensione
 Posizione
 Velocità
Caratteristiche iniziali ambiente:
Corso
Gravità
di Laurea in Bouncing Balls
Comunicazione Digitale
Struttura sketch
Classe Ball descrive le palline e i loro
movimenti nello spazio
Main 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 Bouncing Balls
Comunicazione Digitale
Simulazione fisica - moto
Presenza di gravità → moto accelerato
x= x 0 v 0 t
1 2
at
2
In realtà conviene risolvere l'accelerazione
come cambio di velocità istantanea,
considerando uniforme il moto tra un
frame e il successivo
v= v 0 at
x= x 0 vt
Corso di Laurea in Bouncing Balls
Comunicazione Digitale
La classe PVector
Inserita 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 Bouncing Balls
Comunicazione Digitale
Versione 0: ultimi ritocchi
Aggiunta di semplice interazione:
• Mouse click sx → crea pallina
Definizione di un limite superiore al numero
di palline presenti (maxBalls)
CODICE
Corso di Laurea in Bouncing Balls
Comunicazione Digitale
Gestione collisioni
Due 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 Bouncing Balls
Comunicazione Digitale
Urto con le pareti
Se 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 Bouncing Balls
Comunicazione Digitale
Fix up
Fase 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 Bouncing Balls
Comunicazione Digitale
Rotolamento contro le pareti
Ogni 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 Bouncing Balls
Comunicazione Digitale
Versione 1: ultimi ritocchi
Aggiunta rotazione del campo gravitazionale
Aggiunta di un semplice puntatore
triangolare per indicare la direzione del
campo gravitazionale
CODICE
Corso di Laurea in Bouncing Balls
Comunicazione Digitale
Urto tra particelle
E' la parte più complessa, sia a livello
concettuale che computazionale
Per 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 Bouncing Balls
Comunicazione Digitale
Urto elastico (masse uguali)
E' la parte più complessa, sia a livello
concettuale che computazionale
Per 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 Bouncing Balls
Comunicazione Digitale
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 Bouncing Balls
Comunicazione Digitale
Urto elastico (masse uguali)
2. La velocità dell'oggetto in moto viene
scomposta rispetto all'angolo di
incidenza dell'urto
Corso di Laurea in Bouncing Balls
Comunicazione Digitale
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 Bouncing Balls
Comunicazione Digitale
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 Bouncing Balls
Comunicazione Digitale
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_fram
e
CODICE FINALE
Corso di Laurea in Bouncing Balls
Comunicazione Digitale
Scarica

08_BouncingBalls