Notifiche
Cancella tutti

Problema moto parabolico

  

0

Salve, sto programmando lo sparo di un cannone e non riesco a capire bene come gestire il moto parabolico per far colpire un punto preciso (nemico)

Allora spiego meglio il tutto.

C'è un cannone in una posizione che conosco  Cannone:(cX, cY, cZ) e c'è un nemico in una posizione che conosco Nemico:(nX, nY, nZ)
Voglio che il cannone sapendo la distanza tra lui e il nemico si inclini (facendo cambiare la posizione della bocca di fuoco e quindi anche l'altezza iniziale del proiettile) abbastanza per far partire un proiettile che dovrà raggiungere i piedi del nemico.
La potenza di sparo del cannone (le velocità) varierà per permettere al proiettile di raggiungere i piedi del nemico in tot tempo.

Forza di gravità = g

Sono riuscito ad andare vicino al risultato considerando l'altezza iniziale e finale uguali, però avrei bisogno che il proiettile punti ai suoi piedi non alla stessa altezza dalla quale è stato sparato.

Spero qualcuno riesca ad aiutarmi, sono bloccato da diverse ore.

Ciò che ho fatto:

Scelgo tempo prima del impatto TempoPerColpire = Qualcosa

Ho calcolato la direzione verso la quale il cannone dovrà girarsi.

Direzione = PosizioneNemico - PosizioneCannone

DirezioneY = 0 Cosi il vettore direzione è solo riguardante le assi XZ

Con una funzione interna al programma che uso ho trovato la distanza tra il cannone e il nemico (più semplice che fare tutti i calcoli)

Quindi ho la DistanzaNemico

Dopo di che cerco di calcolare tutte le componenti della velocità iniziale del proiettile che utilizzerò anche come direzione del cannone per l'inclinazione

(L'asse Y sarà l'altezza)

VelocitàXZ = DistanzaNemico / TempoPerColpire

Per dividerne le componenti

VelocitàX = VelocitàXZ * DirezioneXNormalizzata

VelocitàZ = VelocitàXZ * DirezioneZNormalizzata

E questo sembra funzionare molto bene, nelle assi xz il proiettile raggiunge il nemico nel tempo giusto. Ma qui inizia il difficile. Non trovando soluzione per adesso ho lasciato cosi:

VelocitàY = 1/2 * (g * TempoPerColpire) Che farà arrivare nel tempo scelto il proiettile all'altezza dalla quale è partito

Infine per l'inclinazione e tutto imposto il cannone nella direzione descritta da queste velocità e sparo il proiettile

 

Autore
Etichette discussione
3 Risposte



3

Ciao

Io risolverei il problema nel seguente modo. Trasformerei il problema in un problema piano (x,y).

Quindi indicherei con

[η, μ]  le componenti iniziali della velocità di lancio: INCOGNITE

[α, β] è la mia posizione di lancio: NOTA

[γ, δ] è la posizione del mio nemico: NOTA

Dalla teoria conosco le equazioni:

{x = α + η·t

{y = β + μ·t - 1/2·g·t^2

Quindi fisso il tempo t =T affinché il proiettile possa raggiungere il nemico che si trova nella posizione nota.

La potenza di fuoco ed in definitiva le componenti della velocità iniziale saranno determinate dal sistema:

{γ = α + η·Τ

{δ = β + μ·Τ - 1/2·g·Τ^2

che mi permetterà di determinare le due incognite:

[η = (γ - α)/Τ ∧ μ = (g·Τ^2 - 2·(β - δ))/(2·Τ)]

 

@lucianop Intanto ti ringrazio per la risposta che forse mi ha portato alla soluzione 😀 .
Ho provato ad applicare il tuo sistema almeno per la velocitàY e non sembra funzionare, spara altissimo nel cielo, credo tu abbia sbagliato a trasformare l'equazione perché partendo dalla tua equazione e trasformandola da solo è uscito un qualcosa che sembra funzionare ma comunque devo testarlo meglio appena ho tempo che sarebbe con le lettere che hai usato.
Correggimi se ho sbagliato ad interpretare, ho parecchia confusione riguardo questo argomento di fisica
Questo è quello che ho ottenuto trasformando la tua equazione

μ = (δ - β) / T + 1/2 g * T

 



1

Se pensi a un cannone il moto parabolico te lo sogni in Technicolor™.
Se stai programmando un videogioco allora assimili la bomba a un punto materiale e ti riduci a un esercizio di cinematica senza vento, temperatura, umidità, ... col moto parabolico.
Se l'accelerazione è quella di gravità "g" allora hai un moto che si svolge nel piano verticale che contiene i punti C ed N e pertanto non ti servono tre coordinate: ne bastano due; se il videogioco è tridimensionale ti serve una trasformazione di coordinate prima dei calcoli e una dopo.
ATTENZIONE #1: Dire "Scelgo tempo prima del impatto TempoPerColpire = Qualcosa", scusami, mi pare una fesseria! Cioè un artigliere cambia il pezzo secondo il bersaglio? Una volta scelta l'arma è la velocità di lancio ad essere una costante iniziale, poi il tempo di volo dipende dalle posizioni relative.
ATTENZIONE #2: nei sintagmi "riguardante le assi XZ" e "nelle assi xz il proiettile" c'è un errore lessicale: "le assi" (femminili) sono tavole piatte, "gli assi coordinati" sono maschili.
ATTENZIONE #3: nella frase "facendo cambiare la posizione della bocca di fuoco e quindi anche l'altezza iniziale del proiettile" c'è un errore concettuale: l'altezza iniziale del proiettile non è sulla bocca di fuoco, ma nella culatta del pezzo (che tu chiami "i piedi").
Poi fai come vuoi: io mi riferisco alla trattazione generica nel piano CgN.
Nel riferimento Oxy di quel piano faccio conto che la tua trasformazione di coordinate abbia posto il punto di lancio in (0, 0) e il bersaglio in (w, h): per ogni velocità V di lancio ci sono due diversi alzi di possibili traiettorie che li connettono e che, per i cannoni veri, si chiamano "tiro teso" (Tavole Siacci) e "tiro a mortaio" (Tavole Picone).
Vedi la mia risposta al link
http://www.sosmatematica.it/forum/postid/37610/
dove "l'abnorme espressione simbolica" è proprio quella che ti serve da programmare, metti il calcolo in WolframAlpha e stampati i risultati.

 

@exprof Allora facciamo un po' di chiarezza sul contesto!
Certamente è un videogioco, non ho programmato vento o altre robe perciò mi sembra di capire che sia un problema di moto parabolico a questo punto ma magari mi sbaglio, non sono molto pratico di definizioni e in generale ho solo vaghe conoscenze di fisica che cerco di sfruttare al massimo. Ho scritto il post nella maniera che riteveno più chiara senza badare troppo ad essere fiscale anche nei limiti delle mie conoscenze.

 

So benissimo che non sono necessarie 3 coordinate ma ai fini dello sviluppo lo sono, necessito di esse per ruotare, cambiare direzioni, applicare forze e simili. Non posso mutare totalmente a mio piacimento il sistema di riferimento per rendere più semplice il problema.

 

Scusa ma non capisco cosa intendi per "se il videogioco è tridimensionale ti serve una trasformazione di coordinate prima dei calcoli e una dopo."

 

Riguardo il tempo per l'impatto è una mia scelta di design del gioco chiaramente, per il tipo di gioco che sto facendo in quanto vincolato ad una piccola arena, lo trovo più adatto.

 

Chiedo scusa per la mia pessima grammatica, sono sempre stato pessimo in italiano, ovviamente non mi da fastidio tu me lo abbia fatto notare, un aiuto è pur sempre un aiuto.

 

Sul punto 3: Certo, hai ragione. però per convenzione nei videogiochi i proiettili vengono fatti apparire sulla bocca di fuoco per poi essere sparati, quindi è quella la posizione dalla quale applicherò la forza istantanea. Fosse partito da dentro ignorando tutti i problemi del caso ovviamente avrei dato quella come posizione iniziale del proiettile.

 

Immaginavo ci fosserò 2 angolazioni di tiro che portavano allo stesso risultato, ma comunque interessante da far notare.

 

@exprof ❤❤❤



1

moto verticale :

hfin - hin = Vo*sin Θo*t -g/2*t^2

 

moto orizzontale : 

gittata G = Vo*cos Θo*t



Risposta
SOS Matematica

4.6
SCARICA