|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Simulare una palla che rimabalza
Ciao a tutti, sto provando a simulare il comportamento di una palla che rimbalza dopo essere stata "sparata".
Per farlo utilizzo le classicje leggi orarie del moto eccelerato e non, ovvero la posizione Y=y0+Vy0*t-(g/2)*t^2 e la posizione sulle X=x0+Vx0*t Queso fa bene fino a che tocca terra ma quando tocca terra cosa devo fargli fare? Io ho pensato di riazzerare il tempo e risettare come posione inziale quella in cui si trova e quindi di invertire il segno della velocità Vy0.Questo va abb bene ma siccome il controllo della collisione sul terreno lo fa ogni ciclo, ma la palla può darsi che un attimo prima nn si in collisione mentre l'attimo dopo nn solo ha colliso, ma ha anche superato il terreno e quindi non funziona tanto bene. Come si fa di solito? grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Mmm, se non devi fare una simulazione accurata una idea che mi viene in mente è quella di usare una funzione trigonometrica (sin(x) o cos(x) o il loro quadrato) per la posizione Y moltiplicata per un fattore di smorzamento da far avvicinare sempre più allo zero ogni volta che la palla tocca terra .
Altrimenti credo che la Y sia sufficiente calcolarla invertendo Vy0 e azzerando il tempo (come hai suggerito anche tu mi sembra) Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Mi sa che sto usando un approccio sbagliato.
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
La via più ovvia mi sembra quella di modificare le velocità che istante x istante agiscono sulla palla, ma non sto ottenendo buoni risultati... |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2005
Messaggi: 80
|
Prova a utilizzare il modulo:
- lungo l'asse Y, ponendo il pavimento con ordinata 0, non ci dovrebbero essere particolari problemi, se non invertire il segno dell'accelerazione di gravità dopo ogni urto ( y = |.....|); - lungo l'asse X bisogna fare attenzione all'ascissa degli ostacoli verticali, e quindi impostare un sistema con equazioni del tipo x-X0 = |......|, avendo cura questa volta di invertire il segno della velocità dopo ogni urto. Spero di non aver detto troppe fesserie "dinamiche" |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Nell'ipotesi semplificativa che la palla non stia ruotando su se stessa, che non sia sottoposta ad attriti, che sia trascurabile il proprio raggio, che il tutto avvenga su di un piano perpendicolare al piano di lancio, si ha (a meno di errori grossolani):
v0=Velocita' iniziale con cui e' stata lanciata la palla. a=alzo g=accelerazione di gravita' L'equazione della traiettoria della palla sara': y=x*tg(a)-x^2*g/(2*v0^2*Cos(a)^2) La gittata sara': G=v0^2*Sin(2*a)/g Il tempo di volo sara': 2*v0*Sin(a)/g L'altezza massima raggiunta sara': v0^2*Sin(a)^2/(2*g) Quando la palla tocca terra, l'angolo d'impatto sara' b=a (dall'equazione della traierroria), ma se l'impatto avviene ad un'altezza diversa o se la proiezione del piano d'impatto non e' parrallela alla proiezione piano di lancio, e' sufficiente derivare l'equazione della traiettoria nel punto d'impatto e sottrarre a derivata della retta costituente la proiezione del piano d'impatto. Calcolato b (angolo d'impatto), e' necessario riapplicare tutto il procedimento da principio tenendo conto che: a=b v0=v0*f1-f2 f1 e f2 sono fattori di smorzamento il primo tiene conto della risposta elastica della palla ed e' una quantita minore di 1 (0.7 per esempio), il secondo tiene conto di uno pseudo-attrito (altrimenti la palla rimbalzerrebbe all'infinito (ed e' ad esempio 1/10 della velocita' iniziale). La palla si ferma quanto v0<0. P.S. Si tratta di un modello primitivo, spero ti sia d'aiuto. EDIT: Corretta l'equazione della traiettoria della palla (e' una parabola, mancava un x^2) Ultima modifica di repne scasb : 23-02-2006 alle 11:03. |
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: May 2005
Messaggi: 80
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Grazie ragazzi ho risolto per quanto riguarda i rimbalzi, ora ad ogni collisione mi ricalcolo l'angolo di uscita dopo l'urto alpha (e betha xkè sono in uno spazio 3D) in relazione a l'angolo d'impatto e a quello della superficie dove si impatta ed il modulo della velocità, in questo modo riesco a ricalcolare tutte le componenti della velocità.Mi sembra che sia molto reale così.
Ora mi rimane da trovare un buon metodo per sapere quando ci sia una collisione. Considerando che può impattare contro più superfici contemporaneamente, come posso fare? Avevo pensato di calcolarmi a priori se la traiettoria della palla interseca o no un qualche oggetto, ma da cosa è descritta la traiettoria della palla? Siccome sono in uno spazio 3D non mi basta la classica Y=x*tan(alpha)-(g/2*(Vo*cos(alpha))^2)*x^2) xkè in questo modo mi calcolo solo la Y, a me serve anche la Z. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Sono risucito a ricavarmi anche la Z ora provo a vedere se funziona.
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2005
Città: Padova
Messaggi: 1156
|
se per te non è un problema potresti postare le sorgenti oppure anche solo l'exe ?
grazie
__________________
THUG-LIFE |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Codice:
Ora mi rimane da trovare un buon metodo per sapere quando ci sia una collisione. coordinate palla(10,10,10) qualsiasi poligono a coordinate (10,10,10) significa che c'è collisione |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2002
Città: putignano(BA)
Messaggi: 1453
|
che programma stai usando?
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Sto usando labview non se lo conoscete, usa il linguaggio G che è grafico.
Per quanto riguarda le coordinate io so le coordiate del centro della sfera infatti per spostare la sfera sposto il suo centro, mentre per un poligono conosco solo i vertici, quindi nonnè così semplice la cosa. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
Lo spazio 3d è il tuo mondo. Ogni punto di questo spazio è formato da 3 coordinate appunto spazio 3d. Se hai un poligono quadrato nel tuo mondo il poligono a 4 vertici cioè un piano con queste coordinate per esempio. 100.0........100.0 ---------- |...........| |.....S....| S = sfera che stà a coordinate (x, y, z ) = (50.0, 0.0, 50.0) |...........| ---------- 0.0.........100.0 coordinata z ^ | | | | ----------> coordinata x Tu dici di conoscre le coordinate della sfera quindi hai una sfera che nel tuo mondo 3d si trova a coordinate tot esempio: sfera a coordinate (x, y, z) = (50.0, 0.0, 50.0) la y = 0 perchè attaccata al suolo. se muvi la sfera e ti porti a coordinate (x, y, z) = (0.0, 0.0, 0.0) la posizione della sfera sarà: 100.0........100.0 ---------- |...........| |...........| |...........| S-------- 0.0.........100.0 S = sfera ora stà a coordinate (x, y, z ) = (0.0, 0.0, 0.0) e c'è pure collisione con il poligono. se vuoi scostarti (collision response) fai: if (sfera<0.0) sfera+=1.0 è solo un esempio, sfera potrebbe essere un D3DVECTOR che rappresenta un vettore di posizione io faccio così in directx. Solo per farti capire il concetto. cerca con google questi termini - spazio 3d - collision detection - collision response Ultima modifica di okay : 25-02-2006 alle 18:22. |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ho capito quello che vuoi dire, ma mettiamo il caso che io ho un poligono simile al cubo con 4 vertici quindi ma con le facce non parallele tra loro e inclinate di alpha gradi rispetto al suolo, a me serve che quando ho una collisione abbia le informazioni della superficie contro cui sto collidendo tipo l'angola che ha con il suolo, lo smorzamento che provoca sulla palla ecc ecc.
Se io faccio una cosa come quella che dici te so solo (e con mooooolta approssimazione) quando la sfera mi interseca un poligono. per il collision respone ho già risolto, sto cercando un buon collision detect ora |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Considerando che io conosco l'equazione del moto della mia palla, posso sapere quando essa interseca un piano le cui coordinate generiche sono ax+by+cz+d=0
Il problema è che non riesco a ricavarmi l'equazione di ogni faccia dei miei poligono conoscendo solo i vertici. Se qualcuno mi aiuta... |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
(x, y z) = (0.0, 100.0, 100.0) ecc ecc... quindi basta calcolare la posizione (vettore 3d) della sfera e le posizioni (vettori 3d) degli 8 vertici. ... esatto calcolando il collision response con le formule trigonometriche ottieni il risultato che vuoi... + o - una fisica decente dipende da cosa vuoi e fare. repne scasb è sempre mitica... ciao Ultima modifica di okay : 25-02-2006 alle 19:59. |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ti ringrazio per l'interessamento, non ho capito cosa intendi per mettere insieme 5 poligoni non è che mi faresti un disegnino?
Comunque questa immagine mostra la palla che sta per impattare contro la superficie blu, come vedi la superficie non è regole in quanto è angolata rispetto al suolo. ![]() In questo caso come fai ad indivudare se la palla collide o no? Ti ripeto che io conosco solo i 4 vertici della faccia e le coordinate del CENTRO della palla. |
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
io purtroppo non so darti indicazioni precise perché non ho mai studiato geometria analitica a più di 2 dimensioni, comunque essenzialmente dovresti ricavare l'equazione del piano su cui giace la faccia (e per farlo ti bastano anche solo 3 vertici, uno è superfluo) e l'equazione della parabola descritta dalla sfera; poi le metti a sistema e così trovi il punto o i punti (se esistono) in cui la parabola e il piano coincidono. se questi punti esistono sono sicuramente solo due, magari coincidenti, quindi il massimo che devi fare è un'equazione di secondo grado
PS: non vorrei sparare una balla grossa così (oltre a quella della tua simulazione ax + by + cz + d = 0 prendila con le pinze
Ultima modifica di 71104 : 25-02-2006 alle 21:43. |
|
|
|
|
|
#20 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
altra soluzione, sicuramente migliore: calcolare i punti di tangeza (se esistono) tra la sfera e il piano in questione, anche considerando che in certi casi il piano potrebbe avere dei punti di tangenza, ma siccome il poligono che ci interessa è limitato potrebbe non esserci comunque la collisione. non ho la minima idea di come fare
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:14.




















