Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Nella prima parte di questa ricerca si vuole trovare un modo per calcolare e visualizzare la traiettoria di un proiettile, con Matlab. Prima di affrontare la parte relativa all'algoritmo e al calcolo numerico, è opportuno richiamare alcuni concetti di balistica, e di fisica, sui quali sarà basata la soluzione del problema.
Laboratorio di Software per il Calcolo Scientifico 2
INTERFACCIA GRAFICA PER IL
METODO DI SCHMIDT
Calcolo e visualizzazione della traiettoria di un
proiettile con l’interfaccia grafica Matlab
Sebastiano Ferraris
Anno Accademico 2007-2008
La natura e le leggi della natura giacevano nascoste nella notte; Dio disse:
“Che Newton sia!”, e luce fu.
- Alexander Pope
2
Indice
1 Problema 5
1.1 Nomenclature . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Fisica: moto di un proietto nel vuoto e nell’aria . . . . . . . . 6
2 Soluzione 8
2.1 Metodo di Schmidt . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Algoritmi 11
3.1 Algoritmo di Schmidt in C . . . . . . . . . . . . . . . . . . . . 11
3.2 Algoritmo di Schmidt in Matlab . . . . . . . . . . . . . . . . 13
3.2.1 Retta parallela ad una retta data, per un punto dato 14
3.2.2 Retta per due punti dati . . . . . . . . . . . . . . . . . 15
3.2.3 Intersezione fra due rette . . . . . . . . . . . . . . . . 16
3.2.4 Distanza fra due punti . . . . . . . . . . . . . . . . . . 17
3.2.5 Punto medio . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.6 Funzione ricorsiva che trova il punto medio dei punti
medi di due segmenti contigui . . . . . . . . . . . . . . 18
3.2.7 Function finale . . . . . . . . . . . . . . . . . . . . . . 19
3.2.8 Filmato della traiettoria . . . . . . . . . . . . . . . . . 21
4 Interfaccia grafica per il metodo di Schmidt 24
4.1 Introduzione alla GUI . . . . . . . . . . . . . . . . . . . . . . 24
4.2 Applicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.1 M-File per l’interfaccia grafica . . . . . . . . . . . . . 26
4.2.2 Commenti all’m-file . . . . . . . . . . . . . . . . . . . 31
4.2.3 Risultato finale . . . . . . . . . . . . . . . . . . . . . . 35
3 INDICE
Prefazione
Questa tesi di LAB CS2 intende essere una evoluzione della tesi di presentata l’anno
scorso durante l’esame di LAB CS1. I primi tre capitoli sono dedicati alle argo-
mentazioni della tesi precedentemente sviluppata con le opportune modifiche, per
poter trattare, nell’ultimo capitolo, l’argomento centrale di LAB CS2: l’interfaccia
grafica GUI di MATLAB. 4
Capitolo 1
Problema
Nella prima parte di questa ricerca si vuole trovare un modo per calcolare e visua-
lizzare la traiettoria di un proiettile, con Matlab.
Prima di affrontare la parte relativa all’algoritmo e al calcolo numerico, è opportuno
richiamare alcuni concetti di balistica, e di fisica, sui quali sarà basata la soluzione
del problema [http://www.earmi.it/balistica/fisica.htm].
1.1 Nomenclature
La balistica è quel ramo della fisica meccanica che studia il moto dei proiettili.
La balistica interna studia il moto all’interno della canna dell’arma, la balistica
esterna studia il moto fra la canna dell’arma e il bersaglio, e la balistica termi-
nale studia il moto nel bersaglio colptio.
La traiettoria è la line curva percorsa dal centro di gravità della pallottola durante
il suo movimento.
La linea di proiezione è il prolungamento dell’asse della canna, nel momento in
cui il proettile viene sparato; ovvero la tangente alla traiettoria nell’origine.
L’angolo di proiezione è l’angolo compreso fra la linea di proiezione e l’orizzonte.
La gittata è la distanza fra l’origine e il punto di caduta.
T Linea di proiezione
α Angolo di proiezione
OG Gittata
V Vertice della traiettoria 5 1.Problema
Figura 1.1: Figura delle nomenclature disegnata con il sofrware AutoCAD
1.2 Fisica: moto di un proietto nel vuoto e nell’a-
ria
Nel vuoto, un proiettile durante il suo tragitto, è sottoposto alla somma di due forze:
il vettore velocità iniziale, che imprime al proiettile un moto rettilineo uniforme
lungo l’asse orizzontale, e la forza di gravità, rivolta verso il basso, che tende a
far cadere il proiettile con un moto accelerato uniforme. Dato il vettore velocità
iniziale v che avrà direzione parallela alla linea di proiezione, e sarà esprimibile in
componenti come somma di due vettori paralleli agli assi v e v , posso calcolare
x y
il vettore spostamento s, che unisce due punti successivi della traiettoria, come la
·
somma di due vettori, paralleli agli assi coordinati: s = s + s . Dove s = v t ed
x y x x
2
· − · ·
s = v t 1/2 g t . La traiettoria descritta dai successivi vettori spostamento, è
y y
una parabola simmetrica, rivolta verso il basso ad asse verticale [Paul Tipler “Fisica
I ”Zanichelli].
Nell’aria (in assenza di vento), oltre al vettore velocità iniziale, e alla forza di
gravità, il proiettile è sottoposto anche alla resistenza dell’aria, opposta alla direzio-
ne del moto del proiettile. La traietoria finale, in due dimensioni non sarà più una
parabola simmetrica, ma sarà una parabola asimmetrica, con il ramo ascendente
più lungo di quello discendente. Per disegnare una approssimazione della traiettoria
nell’aria, si può usare il metodo di Schmidt.
6
1.Problema
Figura 1.2: Traiettoria
7
Capitolo 2
Soluzione
Per il calcolo di una traiettoria parabolica si può utilizzare il metodo di Schmidt.
2.1 Metodo di Schmidt
Il metodo di Schmidt, parte dall’idea di approssimare la traiettoria di un proiet-
tile nell’aria, con la traiettoria di un proiettile nel vuoto, il quale sarà però anche
sottoposto ad una forza di verso opposto alla direzione del suo moto, che simula la
forza resistente impressa dall’aria.
Il proiettile risulterà quindi sottoposto a tre vettori diversi: la gravità, la velocità
istantanea e la forza resistente. Il punto di applicazione di questi vettori è il bari-
centro della pallottola.
Figura 2.1: Proiettile sottoposto al vettore gravità, velocità e resistenza
disegnata con il sofrware POV-RAY 8
2.Soluzione
Per applicare il metodo di Schmidt, che si basa sulla seguente proprietà 1, servono
l’angolo di proiezione, la gittata ed l’ordinata del vertice.
Proprietà 1. Date due tangenti ad una parabola, la retta che congiunge la metà
dei due tratti, misurati dal punto di contatto al punto di incontro, è a sua volta
tangente alla parabola.
Per disegnare la traiettoria parabolica si parte dalla linea di proiezione, misurata
fra l’origine la sua intersezione B con la retta perpendicolare ad OG passante per il
vertice. Una volta definito il segmento OB, lo si raddoppi, sulla linea di proiezione,
per trovare il punto C. La seconda tangente alla parabola, nel punto di caduta,
sarà dato dalla retta passante per CZ, e il punto D sarà la sua intersezione con la
retta perpendicolare ad OG passante per il vertice.
A questo punto si prendano in considerazione i quattro segmenti trovati, tangenti
alla parabola: OB, BV , V D, DG, e i trovino i punti medi di ciascun segmento,
rispettivamente A , A , A , A . Per la proprietà 1, so che la parabola è tangente
1 2 3 4
ai quattro punti trovati. Trovando i punti medi dei segmenti formati da OA , A B,
1 1
BA , A V , V A , A D, DA , A G si ottengono sei ulteriori punti di tangenza alla
2 2 3 3 4 4
parabola B , B , B , B , B , B . Reiterando il ragionamento, si possono trovare
1 2 3 4 5 6 ·
ad ogni n−esimo passaggio (n + 1) 2 nuovi punti di tangenza.
Quando si è raggiunto un numero di punto soddisfacente, si potrà costruire la
parabola passante per i punti trovati, che corrisponde ad una approssimazione della
parabola reale, con il metodo di interpolazione.
9 2.Soluzione
Figura 2.2: Figura dell’algoritmo di Schmidt
10
Capitolo 3
Algoritmi
3.1 Algoritmo di Schmidt in C
Per trovare i punti di approssimazione di una traiettoria con l’algoritmo di Schmidt
usando Matlab, può essere utile scrivere prima il programma in linguaggio C. Esso
si articola in due fasi diverse: la prima consiste nel trovare i 5 punti di partenza O,
b, v, d, G della figura 2.2, che formano la “struttura iniziale”.
La seconda fase consiste in un ciclo nel quale si trovano i punti medi dei punti
medi dei punti della “struttura iniziale ”, in modo da avere cosı̀ i punti di tangenza
cercati. Aumentando il numero di iterazioni del ciclo, si aumenterà il livello di
precisione nell’approssimazione della traiettoria.
//programma per il calcolo del metodo di Schmidt
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define EPSILON 1
struct Punto
{ double x;
double y;
};
//Funzione della distanza fra due punti
11 3.Algoritmi
double Dist(Punto uno, Punto due)
{ return(sqrt((uno.x - due.x)* //vado a capo
*(uno.x - due.x)+(uno.y - due.y)*(uno.y - due.y)));
}
// Funzione che calcola il punto medio tra sin e des
Punto PuntoMedio(Punto sin, Punto des)
{ Punto centro;
centro.x = (sin.x + des.x) / 2.0;
centro.y = (sin.y + des.y) / 2.0;
return(centro);
}
// funzione che calcola i punti medi e il punto medio dei medi
void CalcSeg(Punto tang1, Punto centro, Punto tang2)
{ Punto CentroSinistra, CentroDestra;
Punto CentroCentro;
if(Dist(tang1, tang2) < EPSILON)
//dove EPSILON e’ l’approssimazione cercata
return;
CentroSinistra = PuntoMedio(tang1, centro);
CentroDestra = PuntoMedio(tang2, centro);
- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Per termini, condizioni e privacy, visita la relativa pagina.