urti elastici in due dimensioni

Algoritmi, discussioni sulle possibili implementazioni, matematica, fisica e tutti gli argomenti correlati alla programmazione
Rispondi
Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

urti elastici in due dimensioni

Messaggio da CaMpIoN »

Volevo fare un esercizio in GM con gli urti elastici in due dimensioni riproducendo due sfere che si urtano non frontalmente. Il problema è l'angolo dopo l'urto, dove sto imparando gli urti è spiegato come trovare l'angolo considerando le due masse uguali e una sfera ferma, allora il risultato che viene è:

tanα2=ctgα1

Trovando ora l'angolo α1 ottengo (scritto in gml):

α1=radtodeg(arctan(1/tan(α2))); (trasformo in gradi per il lengthdir)

(Le masse sono diverse ma in questa formula non servono e quindi se le modifico non cambia).

Il problema è che l'angolo α1 è sbagliato, cioè non è reale va in direzioni sbagliate, poi ho provato dividendo il vettore della velocità nelle due componenti orizzontali e verticali, e calcolandomi le singole velocità con le funzioni trigonometriche alla fine mi ritrovo con quattro velocità v1x,v1y,v2x,v2y l'angolo di entrambe le sfere lo trovo quindi applicando la formula trigonometrica tanα=sinα/cosα e quindi in GM:

α1=radtodeg(arctan2(v1y,v1x));
α2=radtodeg(arctan2(v2y,v2x));

Nemmeno con questo metodo funziona, anche invertendo le y mettendo -v1y e -v2y è sbagliato, allora mi chiedevo sono io che sbaglio ad applicare le formule in GM o proprio le formule in quel caso sono sbagliate?
Senno' qual'è la soluzione?
Giochi da me creati:
Spoiler
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: urti elastici in due dimensioni

Messaggio da BaronVsCorsar »

CaMpIoN ha scritto:Volevo fare un esercizio in GM con gli urti elastici in due dimensioni riproducendo due sfere che si urtano non frontalmente. Il problema è l'angolo dopo l'urto, dove sto imparando gli urti è spiegato come trovare l'angolo considerando le due masse uguali e una sfera ferma, allora il risultato che viene è:
l'argomento non è dei più semplici, lo concedo, ma anche il tuo inizio è abbastanza oscuro. Ti è venuto spontaneo ho l'hai passato a un obfuscator prima di postarlo? :lol:

non è molto facile quello che ti proponi se non hai molto molto chiaro come funziona il tutto.
Studiatelo su wikipedia (o su altro sito: urti anaelastici di punti materiali).

tI riporto un codiche che uso, già testato in gml. Essendo un sunto (in cui ho rimosso tutto quanto non ti interessa) mi auguro di non aver fatto errrori tagliando qualche cosa che serviva.
Le variabili ovviamente vanno definite (come ad esempio mass), ed è realizzato nell'evento collision di due istanze dello stesso oggetto.
Era molto commentato, ma ho aggiunto altri commenti.
Spoiler

Codice: Seleziona tutto

 //collisione tra oggetti solidi
 //gestito dall'istanza con id maggiore (più nuovo)
 if (self.id < other.id)
  {
   exit;
  } //per comodità ho deciso di fare i conti per entrambi le istanze in una sola!

  var i;
   // var dirso, self_ratio, other_ratio;
   // var vels, velo, damos, damso, vsf, vof, dirs, diro;
   //prendere la direzione self->other
   dirs= image_angle mod 360; //direzione self. Il modulo è dovuto a come la usavo in altri script, e poteva andare oltre 360
   diro= other.image_angle mod 360; //direzione other
   dirso= point_direction(x,y,other.x,other.y); //direzione dell'urto (self -> other) (gli sprite hanno origine al centro e sono "sfere"
   
   //per evitare doppie collisioni se gli oggetti sono compenetrati li estraggo (al massimo della lunghezza di una diagonale)
   //scelgo di estrarre l'oggetto con massa minore
   if (mass <= other.mass)
   {
    i= 1;
    while ( (i < sqrt(sqr(sprite_width)+sqr(sprite_height))/2 ) &&
            ( place_meeting(x,y,other) )
          )
    { 
     move_outside_all(dirso+180, 1); //1 pixel alla volta, uso sprite che in realtà non sono sferici e l'effetto era migliore in questo modo
//in teoria non servirebbe, ma facendolo tutto in una volta c'era l'impressione di avere collisioni con un pixel o più di distanza
     i+= 1;
    }
   } //end mass <= mass.other
   else //caso che sia other l'oggetto più leggero, faccio le stesse cose
    {
     with (other)
     {
       var i;
       i= 1;
        while ( (i < sqrt(sqr(sprite_width)+sqr(sprite_height))/2 ) &&
                ( place_meeting(x,y,other) )
               )
         { 
          move_outside_all(point_direction(other.x,other.y,x,y),1); 
          i+= 1;
         }
      }
    } //end mass > other.mass
    
   //trovo la velocità parallela al vincolo (vincolo è nella direzione che unisce self -> other, cioè dirso
   vels=  speed*cos(degtorad(direction-dirso)); //nome poco felice, cmq è la componente di velocità di self parallela all'urto
   //velocità di scontro di other
   velo= other.speed*cos(degtorad(other.direction-dirso));   
 

   //change in speed (urto anaelastico): velocità finale. Le formule le trovi in letteratura. cerca nei siti.
   //questa velocità vale per un urto monodirezionale. Ma avendo scomposto le velcità in componente parallela all'urto
   //e perpendicolare allo stesso, per il noto principio della relatività del movimento, posso considerare un movimento
   //non influenzato dall'urto (direzione perpendicolare all'utro), e da un urto monodimensionale nella direzione dello scontro!
   vsf= ((mass-other.mass)*vels+ 2* other.mass*velo) / (mass+other.mass); //velocità self finale per urto monodimensionale
   vof= ((other.mass-mass)*velo+ 2* mass*vels) / (mass+other.mass);   //stessa cosa per other
   motion_add(dirso, vsf-vels);  //faccio in modo che nella direzione dirso (direzione urto) la velocità corrispnda a vsf
   //aggiungo nella direzione dirso vsf, e tolgo vels (la velocità iniziale parallela alla direzione dell'urto)
   scrpt_add_speed(other.id, dirso, vof-velo); //questo script fa la stessa cosa per other, (with other motion add)

  //nota che scomponendo la velocità in componente parallela all'utro e perpendicolare all'urto ho risolto un problema molto
  //più semplice!
  //la componente perpendicolare della velocità rimane inalterato, e studio un urto monodirezionale.
  //con il movimento conviene sempre fare i calcoli scomponendo la velocità e trattandole indipendentemente!

  //i parametri finali come direzione del movimento e velocità (considerando anche la componente perpendicolare)
  //li hai immediatamente grazie alla funaizone motion_add.
dovessi esserci parti oscure chiedi (dopo molti test).
Credo che le variabili utilizzate siano abbastanza chiare (ho aggiunto commenti).
Se dovesse mancare qualche cosa si tratta di copia e incolla sbagliato, fammi notare che ci riguardo.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

Re: urti elastici in due dimensioni

Messaggio da CaMpIoN »

bhe ti posso dire che anche usando il tuo codice non riesco a capire, mi è utile ma mi sarebbe più utile capire, per prima cosa hai seguito la fisica per fare l'urto o sono metodi realizzati da te (perché un metodo realizzato da me per gli angoli, l'ho trovato, ma non mi convince in campo di realtà)?

Poi aggiungo una cosa, ho letto su wikipedia precisamente su questo paragrafo sugli urti elastici http://it.wikipedia.org/wiki/Urto_elast ... mensionali, allora ho pensato di scrivere le equazioni seguenti:

(Dove v1,v2 sono le velocità iniziali di entrambi i corpi, V1,V2 sono le velocità finali di entrambi i corpi, α l'angolo del primo corpo e θ l'angolo del secondo)

m1v1cos(α1)+m2v2cos(θ1)=m1V1cos(α2)+m2V2cos(θ2)
m1v1sin(α1)+m2v2sin(θ1)=m1V1sin(α2)+m2V2sin(θ2)
1/2m1v1^2+1/2m2v2^2=1/2m1V1^2+1/2m2V2^2 che si semplifica:
m1v1^2+m2v2^2=m1V1^2+m2V2^2

Impostando il sistema e risolvendolo si dovrebbero avere 2 valori per ogni termine incognito, ora mi chiedo due cose, dovrebbe essere così?
Se si, poi se le velocità di ogni corpo e l'angolo sono 1 solo allora le due incognite di ogni termine dovrebbero essere uguali e quindi potrei escludere il delta sotto radice considerandolo come 0, giusto?

Aggiungo che ho letto già precedentemente gli urti e studiati per bene come anche la quantità di moto e l'energia cinetica, ecc.. quindi per quanto riguarda questo so' tutto, ho il problema solo nella determinazione degli angoli.. :) comunque grazie mille per il tuo aiuto ;)
Giochi da me creati:
Spoiler
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: urti elastici in due dimensioni

Messaggio da BaronVsCorsar »

segui la procedura logica del mio codice:

- (questo non c'entra con la fisica) decido quale delle due istanze gestisce tutti i calcoli dell'urto
- Determino la componente delle velocità dei due corpi che è parallela all'angolo di urto (quella perpendicolare all'angolo di urto è non influenzata!). La componente parallela all'urto semplifica il problema riportandomi a quello di due punti materiali che si urtano (ed essendo punti la direzione di movimento è su una retta, altrimenti non si urtano). La componente perpendicolare me la posso scordare, quella parallelo la gestisco molto semplicemente (la direzione rimane la stessa, cambia solo il modulo!)
- (questo non c'entra con la fisica) Eventualmente estraggo i due corpi se sono compenetrati
- Sfrutto il principio di conservazione della quantità di moto e dell'enrgia. Nei calcoli ho applicato direttamente la formula per determinare la velocità finale di un urto tra due punti materiali. Che a occhio (coseni a parte) è la formula che stai citando tu. Nota quanto è più facile lavorare con una grandezza "scalare" (la direzione è fissa): smetto di usare formule trigonometriche!!!
- Modifico la velocità parallela all'urto togliendo il valore della velocità iniziale e aggiungendo quello della velocità finale (occhio! le velocità hanno un segno!!! Posso muovermi in due direzioni data una retta!)
- non devo fare altri calcoli perchè la funzione di gm motion_add gestisce per me questi calcoli (somma vettorialmente la velocità che gli ho indicato a quella iniziale. Come noti nei miei calcoli ho annullato la velocità parallela all'urto, e l'ho impostata pari a quella finale). Ho ottenuto la velocità finale (vettoriale) che cercavo.
Senza usare motion_add dovresti gestirti tu la somma vettoriale. Nulla di difficile insomma.

Quando possibile evita di lavorare con grandezze vettoriali. Se possibile (quando le leggi fisiche lo permettono) scomponi il tuo moto in due direzioni (tipicamente parallela e perpendicolare ad una direzione di interesse: una verrà influenzata e l'altra no!) e studia solo il modulo.
Per ottenere la velocità finale fai la somma tra quella alterata che ti sei calcolato scalarmente e quella perpendicolare iniziale che è rimasta inalterata.
Altri esempio? Corpo in movimento sottoposto a gravità. Trovi la sua componente perpendicolare alla forza di gravità. Questa non cambia. Trovi la componente parallela. Questà è influenzata secondo la nota formula (v+=gravità*tempo). Altero la componente parallela. Sommo la nuova velocità parallela a quella (inalterata) perpendicolare. Fine.
per prima cosa hai seguito la fisica per fare l'urto o sono metodi realizzati da te?
mi sento un po' offeso... :furiosomedio: se chiedi urti elastici e ti do un metodo per urti elastici... :roll: :lol:
Impostando il sistema e risolvendolo si dovrebbero avere 2 valori per ogni termine incognito, ora mi chiedo due cose, dovrebbe essere così?
Se si, poi se le velocità di ogni corpo e l'angolo sono 1 solo allora le due incognite di ogni termine dovrebbero essere uguali e quindi potrei escludere il delta sotto radice considerandolo come 0, giusto?
non sono sicuro di aver capito bene. Ricorda comunque che il modulo di un vettore è per convenzione sempre positivo (la direzione opposta la ottieni con la direzione + 180°, non con il segno negativo). Quindi quando risolvi hai vincoli che rendono una soluzione non accettabile (quella negativa).
Occhio poi all'angolo.
Ma non sono sicuro se fosse questo il tuo dubbio... :fapensare:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

Re: urti elastici in due dimensioni

Messaggio da CaMpIoN »

Guardando su wikipedia ho capito a metà, sto cercando di farlo matematicamente da solo. Per quanto riguarda il tuo esempio ho provato e funziona perfettamente è la teoria che ci sta fisicamente che non capisco, cioè non capisco ne matematicamente e ne teoricamente.. però almeno so' cosa hai fatto vedendo su wikipedia, cioè hai fatto quello che dice riguardo agli urti bi e tridimensionali...

comunque si, il fatto del sistema che ho impostato l'hai capito bene, però è impossibile da risolvere, mi sono fermato dopo essere arrivato ad un'equazione di 4 righe xD..
Giochi da me creati:
Spoiler
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: urti elastici in due dimensioni

Messaggio da BaronVsCorsar »

campion, ti manca il concetto di scomposizione del moto.
ragioniamo per semplicità sulle due dimensioni.
Tu hai un movimento su un piano. Qualunque sia la direzione puoi sempre considerare il tuo moto come la somma di due movimenti: uno parallelo all'asse x ed uno parallelo all'asse y.
Pure in GM ci sta la hspeed e vspeed, no?

Se tu sai che il moto lungo l'asse x rimane in alterato puoi modificare il moto lungo l'asse y senza porti altri problemi (ad esempio in un platform la gravità la puoi settare che influenza solo la vspeed, e gestisci la hspeed in funzione della pressione dei tasti).
Perchè farlo? Perchè spesso semplifica la gestione dei conti.
Pensa ad esempio ad un gioco con la direzione della gravità variabile (ad esempio un pianeta al centro dello schermo e delle astronavi che ci ruotano intorno): in quel caso la gestione è più complicata.

Torniamo al platform: se faccio gestire la vspeed tramite la gravità i conti sono semplici:
vspeed+= indremento_per_gravita_per_ogni_step;
nel caso delle astronavi è più complesso (dipende dalla posizione dell'astronave rispetto al pianeta!)

Bene, abbiamo visto che scomporre il moto è comodo.
Vediamo i tre concetti fondamentali del ragionamento

----CONCETTO 1----
Nota che non siamo obbligati a scomporre il moto nelle direzioni degli assi cartesiani, possiamo farlo in due direzioni qualsiasi (basta che non siano parallele tra loro)!
Se le direzioni sono perpendicolari tra loro la gestione si semplifica.
Ad esempio: direzione dell'urto e direzione perpendicolare dell'urto.

Perchè è più semplice?
Perchè gestisco la direzione perpendicolare all'urto in maniera indipendente dall'urto (per definizione: se mi muovo lungo la direzione dell'asse y, non posso scontrarmi contro un ostacolo messo alla mia destra!).
La parte parallela all'urto... è parallela all'urto. Quindi è totalmente coinvolta nell'urto.

A <----> B

se A e B collidono (sono punti) possono solo farlo in una direzione.

nel mio codice:
dirso= point_direction(x,y,other.x,other.y); //direzione dell'urto (self -> other) (gli sprite hanno origine al centro e sono "sfere"

calcola la direzione dell'urto (due punti si urtano sempre nella direzione che unisce i loro centri, due sfere anche. E' dimostrabile, ma pensa banalmente alla definizione di circonferenza: "tutti i punti equidistanti dal centro"). Se l'oggetto è piccolo è una buona approssimazione a prescindere dalla forma.

Questa è la componente di velocità parallela alla direzione dell'urto.
vels= speed*cos(degtorad(direction-dirso)); //nome poco felice, cmq è la componente di velocità di self parallela all'urto
Perchè? Per definizione di coseno! Il coseno di un angolo moltiplicato per l'ipotenusa del triangolo rettangolo ti da geometricamente uno dei due cateti.
Matematicamente è la proiezione del vettore "ipotenusa" su una direzione. Se questo non ti è chiaro ripassa un po' di trigonometria. Puoi anche accettare come "dogma" che quel calcolo matematico ti dia la componente di una velocità parallela ad una data direzione.
Devo usare naturalmente la differenza dei due angoli perchè a priori non so in che direzione mi sto muovendo.
Imposta il problema sulla carta, disegna i vari vettori (compresa la direzione dell'urto) e vedrai che il coseno dell'angolo che ho indicato corrisponde alla componente parallela all'urto.
Se ti è chiaro puoi continuare a seguire il ragionamento.

Siamo arrivati ad avere la componente influenzata dall'urto. L'altra componente non è influenzata.
Se so come si altera la componente influenzata sono a posto.
----FINE CONCETTO 1----

----CONCETTO 2----
Qui non mi dilungo a meno che non ti sia chiaro.
Sfrutto il principio di conservazione dell'energia e della quantità di moto e determino la velocità finale nella componente influenzata dall'urto.
---FINE CONCETTO 2----

---CONCETTO 3---
lascio la componente non influenzata inalterata e altero solo quella influenzata (che è il passaggio finale)
---FINE CONCETTO 3---

Io credo che non ti fosse chiaro il concetto 1, ma se mi sono sbagliato mi dilungo un po' di più sugli altri due.
Cerca però di capire bene il concetto 1, che altrimenti gli altri due sono non influenti.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

Re: urti elastici in due dimensioni

Messaggio da CaMpIoN »

Oo sei un genio!!

Ho capito perfettamente la tecnica usata, allora sapevo perfettamente il fatto della scomposizione di vettori, infatti GM nelle sue componenti di velocità fa lo stesso, vettorialmente sarebbe:

speed=(hspeed)i+(vspeed)j, come vedi lo so, ciò che non RICORDAVO (dico ricordavo perché l'avevo già studiato precedentemente) è il fatto della trigonometria del coseno che dice che un cateto si ottiene moltiplicando l'ipotenusa per l'angolo adiacente con il cateto.

Mentre il fatto della scomposizione della velocità lungo la direzione d'urto che viene influenzata mentre quella parallela no, lo avevo capito..

ora non mi è chiara un' ultima cosa, perché dopo aver calcolato le velocità, viene aggiunta invece che sostituita?
Giochi da me creati:
Spoiler
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: urti elastici in due dimensioni

Messaggio da BaronVsCorsar »

no, no, la sostituisco!

motion_add(dirso, vsf-vels);

nella direzione dell'urto (dirso), aggiungi un valore vsf (velocità self finale) e sottrai vels (velself iniziale).
Risultato: annullo vels e metto vsf in direzione dell'urto.
Per come calcolo le velocità i segni vanno vene (vsf ha segno negativo se l'urto fa invertire direzione, segno positivo se l'urto rallenta il corpo senza fare invertire la direzione di movimento).

la componente iniziale lungo dirso era
vels

la componente finale lungo dirso è
(vels) + (vsf - vels) = vsf

Ho semplicemente sfruttato il calcolo vettoriale già presente in gm, per questo ho usato un motion_add invece di (un non esistente) motion_replace(direction, value). Ma il concetto è quello: tengo inalterata la componente perpendicolare, e modifico la componente parallela.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

Re: urti elastici in due dimensioni

Messaggio da CaMpIoN »

Ah lo fai in dirso perché è li che è proiettata la velocità, bhe ora ho capito perfettamente ti ringrazio mille :), senza aprire un'altro topic, mi serve un'informazione, penso tu abbia visto i giochi di biliardo, e sicuramente c'era la posizione dove colpire la palla, allora la palla colpita in un punto non centrale ha una traiettoria curvilinea, ecco questo è sicuramente meccanica, ma che principio della meccanica? Momento angolare?
Giochi da me creati:
Spoiler
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: urti elastici in due dimensioni

Messaggio da BaronVsCorsar »

campion, quegli effetti sono possibili esclusivamente perchè è un corpo rigido (vale a dire tridimensionale non deformabile).
Si studia con il momento di inierzia e si scompone il moto in rotazione e traslazione.
La traslazione la gestisci come un centro di massa che trasla, cosa che sai fare perchè è studiabile come un punto materiale.

La rotazione del corpo tridimensionale non è studiabile come punto materiale (un punto essendo monodimensionale non può ruotare). La rotazione non comporta uno spostamento del centro di massa (pensa ad un disco su un giradischi, il suo centro di massa rimane fermo, non ha energia cinetica, mentre il disco sta ruotando attorno al suo baricentro -> quindi energia cinetica la ha! ma non perchè globalmente si sta spostando. E' un equilibrio dinamico).

Non hai assolutamente le basi per studiare il moto di un corpo solido (materia di Fisica I all'università), ed è davvero molto difficile.

Concettualmente non è inaffrontabile:
- determini l'energia necessaria alla rotazione del corpo.
- applichi il principio di conservazione della quantità di moto e dell'energia per studiare il movimento del centro di massa (punto materiale) considerando che parte dell'energia sarà impiegata per la rotazione del corpo tridimensionale.

So che può sembrare strano, ma pensa a questo esempio pratico:
-Prendi una ruota, appoggiala sulla base del cilindro e falla scivolare giù per un piano inclinato sufficientemente liscio. Non ho una rotazione, ma solo una traslazione
-Prendi una ruota, appoggiala come ci si aspetta di appoggiare una ruota e falla rotolare giù per un piano inclinato. La ruota rotola, quindi ruota attorno al suo centro, e trasla verso il basso!
A parità di massa e altri fattori la prima ruota avrà una velocità di traslazione MAGGIORE della seconda ruota, perchè la stessa energia potenziale gravitazionale nel secondo caso è stata impiegata sia per imprimenre velocità di traslazione (energia cinetica) sia di rotazione (sempre energia cinetica, dovuta a velocità che non determina mediamente uno spostamento - rotazione attorno al suo centro).

Spero l'esempio abbia reso l'idea.

Perchè dico di lascia perdere seppur teoricamente siano tutti concetti che già possiedi?
Perchè la matematica per studiare un corpo rigido è DIFFICILE. Si tratta di applicare dei gran integrali (gestendo funzioni tridimensionali).
Per un urto tra due corpi devi gestire 12 variabili (3 coordinate per ogni corpo e 3 coordinate per ogni velocità vettoriale), per un urto tra tre corpi devi gestirne 18....
Il tutto sempre con integrali.
Certo, potresti applicare alcune formule abbastanza semplici per casi specifici (come la sfera), i cui integrali danno risultati abbastanza facili se presi da tabella... ma poi non ci capiresti molto e diventa anche frustrante...

Per l'effetto a cui eri interessato dovresti studiare appunto sia la traslazione del centro di massa del tuo corpo, la rotazione attorno al suo centro di massa (colpendo fuori centro imprimi una rotazione attorno al suo centro di amssa) e come l'attrito del tappeto che si oppone alla rotazione (oltre alla traslazione) imprima una forza sul punto di appoggio della sfera (la proiezione del centro di massa sul tappeto!) che altera la traiettoria (cioè influenza anche la componente traslatoria oltre la rotazione!).
In più in caso di urto si deve gestire sia l'effetto sulla traslazione, sia sulla rotazione...

Insomma, il problema è davvero da Fisica I... e richiede un bel po' di analisi matematica (Analisi II tra l'altro!)
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

Re: urti elastici in due dimensioni

Messaggio da CaMpIoN »

Di analisi matematica ne so' poca, sono arrivato all'inizio del calcolo integrale, cioè dalla definizione alla formula classica, mentre di fisica oltre gli urti base non ne so' di più, sto ancora all'inizio, da come ne parli, dovrei studiare ancora moolto, ai livelli di ora penso anche io che non ci riuscirei mai, quindi seguirò il tuo consiglio e aspetterò.. :)
Ti ringrazio molto per le informazioni e per l'enorme aiuto che mi hai dato!! ;)
Giochi da me creati:
Spoiler
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 18 ospiti