1 / 18

Bouncing Balls

Bouncing Balls. Obiettivo: creazione di un sistema particellare con simulazione di alcuni parametri fisici (gravità, attrito, urti tra particelle...). Impostazione lavoro. Adotteremo un approccio incrementale, aggiungendo feature ad ogni nuova versione Caratteristiche iniziali oggetti:

corin
Download Presentation

Bouncing Balls

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bouncing Balls Obiettivo: creazione di un sistema particellare con simulazione di alcuni parametri fisici (gravità, attrito, urti tra particelle...) Bouncing Balls

  2. Impostazione lavoro Adotteremo un approccio incrementale, aggiungendo feature ad ogni nuova versione Caratteristiche iniziali oggetti: Dimensione Posizione Velocità Caratteristiche iniziali ambiente: Gravità Bouncing Balls

  3. 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 Bouncing Balls

  4. Simulazione fisica - moto Presenza 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 Bouncing Balls

  5. 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)); } Bouncing Balls

  6. 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 Bouncing Balls

  7. 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 Bouncing Balls

  8. 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 Bouncing Balls

  9. 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 Bouncing Balls

  10. 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 Bouncing Balls

  11. Versione 1: ultimi ritocchi Aggiunta rotazione del campo gravitazionale Aggiunta di un semplice puntatore triangolare per indicare la direzione del campo gravitazionale CODICE Bouncing Balls

  12. 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 Bouncing Balls

  13. 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 Bouncing Balls

  14. 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 Bouncing Balls

  15. Urto elastico (masse uguali) 2. La velocità dell'oggetto in moto viene scomposta rispetto all'angolo di incidenza dell'urto Bouncing Balls

  16. 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 Bouncing Balls

  17. 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 Bouncing Balls

  18. 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 Bouncing Balls

More Related