Anteprima
Vedrai una selezione di 9 pagine su 37
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 1 Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 2
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 6
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 11
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 16
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 21
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 26
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 31
Anteprima di 9 pagg. su 37.
Scarica il documento per vederlo tutto.
Calcolo e visualizzazione della traiettoria di un proiettile con il metodo di Schmidth Pag. 36
1 su 37
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Sintesi

pastorbuhro-trajectory.jpgNella 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.


Estratto del documento

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);

Dettagli
37 pagine