Orario: 25-05-2013, 3:12 Benvenuto ospite! (Log inRegistrati)


Rispondi 
Moto parabolico di un proiettile
Autore Messaggio
AlexoFalco
Senior Member

Messaggi: 492
Registrato: Jan 2010
Offline Offline
#1 Moto parabolico di un proiettile
0
So perfettamente che si tratta di un semplice problema fisico... ma implementarlo a livello informatico non è così banale

il problema è questo: ho un proiettile che parte con velocità iniziale V e angolo Q. variando SOLAMENTE l'angolo ( quindi la velocità iniziale rimane costante ) bisogna farlo atterrare ad un preciso punto P, di coordinate (x,y).

La parte difficile del problema è che si tratta di un sistema con due parametri variabili. Se la nostra incognita è solo una ( ovvero l'angolo ) i parametri su cui possiamo variare sono due ( l'altezza e la lontananza di arrivo ). Ovviamente trattandosi di un problema a due parametri e fissando uno dei due possiamo intuire che è impossibile raggiungere tutti i punti del piano, quindi bisogna implementare una specie di dominio delle coppie di coordinate possibili. Quello che mi chiedo è: come si fa?

ecco la mia soluzione parziale.

1) imposto il sistema

x=Vx*t
y=Vy*t-1/2*g*t^2

isolo t e la sostituisco nella seconda equazione

y=(Vy/Vx)*x - 1/2*g*(x/Vx)^2

Vx=Vcos(Q)
Vy=Vsin(Q)

y=(sin(Q)/cos(Q))*x - 1/2*g*(x/Vcos(Q))^2

2) isolo Q

q dopo notevoli calcoli ed aiuti da parte di terzi sarei anche riuscito ad isolarla... non la trascrivo in quanto è assai lunga e complessa, per chi la volesse però che non esitasse a chiedermelo

3) analisi dell'equazione

per coppie di x,y l'equazione ammette o no soluzione, per capire il dominio io farei uno studio del segno, ma in 3 anni di università non ho mai affrontato studi del genere ovvero mai fatto analisi di funzioni a più variabili.


Io suppongo che il mio ragionamento è giusto ma credo che esistano soluzioni più veloci e semplici... se qualcuno può aiutarmi, prego sono a tutto orecchie

spero di essermi spiegato adeguatamente
12-07-2010 13:56
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
_tommo_
Mod nerdcore

Messaggi: 5,910
Registrato: Nov 2008
Offline Offline
#2 RE: Moto parabolico di un proiettile
0
In realtà credo sia molto più facile facendolo informaticamente Occhiolino

Per esempio, dato che la velocità è fissa puoi determinare il "cerchio" raggiungibile dal proiettilile ponendo l'alzo a 45 gradi e risolvendo sull'asse X per trovare il raggio.
Quindi puoi tranquillamente escludere con un bell'if tutti quegli oggetti che non ricadono nel cerchio.
A questo punto, sai che sicuramente esiste una soluzione per gli oggetti abbastanza vicini; e questa la trovi ponendo che la traiettoria passi sia dall'origine sia dal punto P.

L'avevo fatto per Drafted, alla fine era semplice...

Codice:
        inline void _findTargetVelocity( const Ogre::Vector3& start, const Ogre::Vector3 end )
        {
            targetVelocity = (end - start).normalisedCopy() * shootSpeed;

            if( gravity != 0 )    //fai una parabola fino al punto di atterraggio
            {
                targetVelocity.y = -targetVelocity.x*(end.y - start.y)/(end.x - start.x) -
                    0.6f*gravity*((end.x - start.x)/targetVelocity.x);
            }
        }

in questo caso ho trovato più semplice imporre una gravità G arbitraria (è un gioco cartoon) al proiettile, e quindi imporgli di trovare la componente y della velocità che gli permette di passare da entrambi i punti.
Non mi chiedere come ho ricavato la formula perchè non me lo ricordo Asd

EDIT: in effetti si poteva anche fissare la velocità e modificare la formula per trovare l'angolo che ci dà la velocità verticale necessaria; se questo angolo non esiste (v < v' sempre) l'oggetto non è raggiungibile.
Si tratta di fare una derivata e trovare il massimo della funzione della velocità rispetto all'angolo.
Quindi alzo le mani e me ne vado Asd

Tommaso Checchi
< devlog | twitter | Dojo, a C++ game framework >
(Questo messaggio è stato modificato l'ultima volta il: 12-07-2010 14:22 da _tommo_.)
12-07-2010 14:18
Visita il sito web di questo utente Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
TheManuz
Junior Member

Messaggi: 23
Registrato: Jun 2010
Offline Offline
#3 RE: Moto parabolico di un proiettile
0
Penso che tu debba riscrivere le funzioni della posizione x e y in funzione dell'angolo, usando le formule inverse, cioè gli arcoseni e gli arcocoseni.
Se non dico cavolate (sarebbe imbarazzante!!!) i passaggi dovrebbero essere:
Citazione:x=Vx*cos(q)*t
x/(Vx*t)=cos(q)
arccos (x/(Vx*t))=q
per la x, mentre per la y:
Citazione:y=Vy*sen(q)*t - 1/2 g*t^2
y + 1/2 g*t^2 = Vy*sen(q)*t
(y + 1/2 g*t^2)/(Vy*t)=sen(q)
arcsen ((y + 1/2 g*t^2)/(Vy*t)) = q

Allora, in queste due equazioni, x e y sono numeri che già sai (li decidi tu, infatti), g è definita, le velocità iniziali le sai, ti resta solo da stabilire t, cioè il tempo dell'impatto.
Non so se è giusto, forse ho detto un mucchio di cavolate... ma magari ti ho dato uno spunto per trovare la strada giusta!
Fammi sapere, sono curioso di sapere come si evolve la cosa!

MY PROFILE ON
[Immagine: pixeljoint6.gif]
12-07-2010 14:22
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
AlexoFalco
Senior Member

Messaggi: 492
Registrato: Jan 2010
Offline Offline
#4 RE: Moto parabolico di un proiettile
0
@_ToMmo_

sto traducendo quello che hai scritto.... è un codice molto "rozzo" dal mio punto di vista ( matematicamente parlando è molto più pulito disporre dell'angolo ) ma credo si possa fare lo stesso...

@TheManuz

il problema è proprio trovare il tempo: essendo un sistema entrambe le giuste equazioni che hai scritto tu sono correlate dallo stesso tempo. La fisica di base ti insegna di isolare il tempo da una delle due ed inserirlo nell'altra. Così facendo però i calcoli vengono assai ardui e non riesco ad isolare sto benedetto teta ( causa y diverso da zero )

p.s.: spero che per Vx e Vy intendi la stessa cosa perchè esse già sono le proiezioni, se vuoi scriverlo in modo esteso il metodo giusto è Vsen() e Vcos().... ma alla fine ci siamo capiti XD
12-07-2010 14:53
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
_tommo_
Mod nerdcore

Messaggi: 5,910
Registrato: Nov 2008
Offline Offline
#5 RE: Moto parabolico di un proiettile
0
(12-07-2010 14:53)Nightwish ha scritto:  @_ToMmo_

sto traducendo quello che hai scritto.... è un codice molto "rozzo" dal mio punto di vista ( matematicamente parlando è molto più pulito disporre dell'angolo ) ma credo si possa fare lo stesso...

Invece dal punto di vista del computer è migliore, perchè ha poche operazioni, non utilizza angoli, non utilizza pesantissime operazioni trigonometriche...
fai conto che una chiamata a sen o cos pesa come un centinaio di somme e sottrazioni e fa anche accessi in memoria.

Tommaso Checchi
< devlog | twitter | Dojo, a C++ game framework >
12-07-2010 15:06
Visita il sito web di questo utente Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
TheManuz
Junior Member

Messaggi: 23
Registrato: Jun 2010
Offline Offline
#6 RE: Moto parabolico di un proiettile
0
Ah, in effetti scrivendo Vx non serviva mettere cos(q), e idem per la Vy.
Si, era solo una svista.
Comunque, il problema è tosto, in effetti. Ci penso ancora, se mi viene in mente qualcosa ti dico.

MY PROFILE ON
[Immagine: pixeljoint6.gif]
12-07-2010 15:23
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Eclipse
npc in fps 4 food

Messaggi: 11,275
Registrato: Sep 2004
Offline Offline
#7 RE: Moto parabolico di un proiettile
0
la soluzione di _Tommo_ non è per niente rozza, è forse la migliore che potete trovare

Giuseppe Navarria - Moonloop
[Immagine: twittericon.png] [Immagine: linkedinicon.png] [Immagine: steamicon.png]
12-07-2010 15:30
Visita il sito web di questo utente Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Xaldyz
Esoterico

Messaggi: 2,385
Registrato: Apr 2010
Offline Offline
#8 RE: Moto parabolico di un proiettile
0
la gittata G di un proiettile è
Codice:
v^2  sin(2 teta)
----------------
       g

e questa sarebbe la x di arrivo, alla stessa y di partenza

però non ho ben capito qual'è esattamente il tuo problema Sorriso poichè sto studiando fisica in queste ore, è un esercizio che di sicuro mi è molto molto utile Smile
12-07-2010 15:46
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
AlexoFalco
Senior Member

Messaggi: 492
Registrato: Jan 2010
Offline Offline
#9 RE: Moto parabolico di un proiettile
0
(12-07-2010 15:46)Xaldyz ha scritto:  la gittata G di un proiettile è
Codice:
v^2  sin(2 teta)
----------------
       g

e questa sarebbe la x di arrivo, alla stessa y di partenza

però non ho ben capito qual'è esattamente il tuo problema Sorriso poichè sto studiando fisica in queste ore, è un esercizio che di sicuro mi è molto molto utile Smile

il problema è che y finale è diversa dalla y iniziale. Insomma. E' come dire che il cannoncino deve colpire un bersaglio su una montagna. In questo caso le formule diventano assai complesse

in effetti sto valutando anche io di utilizzare la soluzione di Tommy, una volta capiti bene i meccanismi ovviamente Smile
12-07-2010 15:53
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Xaldyz
Esoterico

Messaggi: 2,385
Registrato: Apr 2010
Offline Offline
#10 RE: Moto parabolico di un proiettile
0
appena vado a casa (ora son di fretta, ho quello della CryTek in sala Sorriso) ti posto tutto quanto!!

ops, stasera tornerò gran tardi...comunque due robe: sapendo la gittata, sapendo la x media, fai interpolazione e controlli se il punto è nella parabola Sorriso

questo da un punto di vista matematico puro. Da un punto di vista informatico, ho letto di fretta, ti farò sapere il mio parere domani Sorriso (ed eventualmente anche la formula Smile)
12-07-2010 15:59
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Xaldyz
Esoterico

Messaggi: 2,385
Registrato: Apr 2010
Offline Offline
#11 RE: Moto parabolico di un proiettile
0
bene, ora che ho riletto a freddo la soluzione di Tommo, è la migliore che si può fare.
- Controllare che alla gittata massima il punto stia "sotto" o al limite sulla curva
- Se è così, trova la soluzione esatta

Una vaccata direi Ahsisi e presumo quella, anche dal punto di calcolo a mano, più esatta e semplice di qualsiasi cosa ti potessi trovare davanti Sorriso
13-07-2010 2:07
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
AlexoFalco
Senior Member

Messaggi: 492
Registrato: Jan 2010
Offline Offline
#12 RE: Moto parabolico di un proiettile
0
allora, gentilmente, dovreste spiegarmi teoricamente come si implementa. Non posso creare strutture simili a vettori quindi dovrò agire direttamente sulle componenti x e y della velocità del proiettile

all'inizio dispongo solo della velocità totale, per le componenti devo calcolare le proiezioni, e appunto mi manca l'angolo

mi spiegate bene come trovarle? ho letto dal codice che bisogna normalizzare il vettore, ma se me la cavo con i problemi di analisi, la geometrica analitica mi risulta più ostica
13-07-2010 9:33
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Xaldyz
Esoterico

Messaggi: 2,385
Registrato: Apr 2010
Offline Offline
#13 RE: Moto parabolico di un proiettile
0
trovi la gittata massima che ti ho scritto sopra (Sorriso) e controlli che quella x sia >= del punto di arrivo. E questo è il primo punto. Poi, ti risolvi l'equazione con la gittata massimo (angolo 45°) per y=tua_y. Se risulta possibile calcolare la x corrispondente (delta >=0) vuol dire che ci puoi arrivare.

Questo per il controllo. Per l'angolo esatto...quello è un altro paio di maniche Sorriso. Intanto rifletti su questi spunti, poi si vedrà Occhiolino
13-07-2010 11:42
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
MonkeySoft
Bloody Monkey

Messaggi: 1,215
Registrato: Dec 2009
Offline Offline
#14 RE: Moto parabolico di un proiettile
0
(13-07-2010 9:33)Nightwish ha scritto:  allora, gentilmente, dovreste spiegarmi teoricamente come si implementa. Non posso creare strutture simili a vettori quindi dovrò agire direttamente sulle componenti x e y della velocità del proiettile

all'inizio dispongo solo della velocità totale, per le componenti devo calcolare le proiezioni, e appunto mi manca l'angolo

mi spiegate bene come trovarle? ho letto dal codice che bisogna normalizzare il vettore, ma se me la cavo con i problemi di analisi, la geometrica analitica mi risulta più ostica
Non riesco a capire che dati hai a disposizione... se hai solo la velocità (come scalare) allora ti manca un dato per calcolare l'angolo, come per esempio la velocità sull'asse x (che determina il tempo di impatto).
Se hai un vettore, le componenti sono banalmente le due coordinate che definiscono il vettore.

Dovresti chiarire meglio il problema, per come l'hai descritto è un po' fumoso.

Paolo Tajè
Follow me on Twitter
Bloody Monkey | Facebook
13-07-2010 12:10
Visita il sito web di questo utente Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
AlexoFalco
Senior Member

Messaggi: 492
Registrato: Jan 2010
Offline Offline
#15 RE: Moto parabolico di un proiettile
0
(13-07-2010 12:10)MonkeySoft ha scritto:  Non riesco a capire che dati hai a disposizione... se hai solo la velocità (come scalare) allora ti manca un dato per calcolare l'angolo, come per esempio la velocità sull'asse x (che determina il tempo di impatto).
Se hai un vettore, le componenti sono banalmente le due coordinate che definiscono il vettore.

Dovresti chiarire meglio il problema, per come l'hai descritto è un po' fumoso.

dispongo di:
velocità iniziale ( scalare, è un numero )
gravità ( un valore che soddisfa un effetto grafico visibile, l'ho settata a 0.3 . Realmente è il valore che incrementa la componente verticale del moto verso il basso)
posizione del punto finale ( pixel, riferite alla distanza dall'origine )

dal punto di vista matematico per risolvere l'equazione del moto, ho come sola incognita l'angolo di inclinazione, tale che con la velocità iniziale soddisfa le condizioni ( la freccia arriva al punto finale )
Solo che è particolarmente difficile in quanto mi viene un equazione trigonometrica di secondo grado non omogenea, e non so come risolverla. Ieri ho tentato di svolgere un ruffini di 4 grado, quando avrò voglia e concentrazione continuerò i calcoli.

La svolta è il metodo alternativo, che mi ha convinto quasi al 100% Il problema è che non so come impostare il vettore in quanto io alla fine, nel mio caso, devo settare le condizioni iniziali ( velocità x e velocità y ) alla pallina. Non capisco come normalizzando il vettore posso dare queste informazioni all'oggetto ( sia teoricamente che praticamente ). Soprattutto perchè per dare al mio oggetto queste informazioni necessito appunto dell'angolo di inclinazione ( per quanto ne so un vettore è formato da modulo direzione e verso.... io ho solo il modulo )


Il resto è tutto chiaro
13-07-2010 12:22
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Rispondi 


Vai al forum: