Lezione 4 e 5
Lezione 4 e 5
Classi, Ereditarietà

In questa quinta lezione vogliamo affrontare un semplice problema di elettrostatica utilizzando un codice numerico. In particolare vogliamo calcolare il campo elettrico generato da un dipolo ( e idealmente anche un generico multi-polo). Nell'affrontare questo problema fisico approfondiremo il concetto di ereditarietà in C++. Come al solito dovremo preparare un set di classi utili per lo svolgimento dell'esercizio.

ESERCIZIO 5.0 - Creazione della classe Posizione :

Implementare una classe Posizione che descriva un punto nello spazio tridimensionale seguendo queste indicazioni:
  1. Come data membri privati usare la terna di coordinate cartesiane.
  2. Definire un costruttore di default che crei un punto di coordinate (0,0,0).
  3. Definire un costruttore che abbia come argomento una terna di double corrispondenti alle coordinate del punto.
  4. Definire metodi per restituire le coordinate del punto in sistemi di coordinate cartesiane, sferiche e cilindriche.
  5. Definire un metodo che calcoli la distanza da un altro punto.
Verificare il funzionamento della classe creando un programmino che legga da riga di comando le coordinate cartesiane di un punto e ne stampi le coordinate in un sistema di coordinate sferiche e cilindriche.

Header file della classe:

File di implementazione delle classe

Incapsulamento e data hiding

Esempio di programma (scarica un esempio qui )


ESERCIZIO 5.1 - Creazione della classe Particella ed Elettrone:

Incominciamo a definire due classi che ci permetteranno di rappresentare le sorgenti del campo (elettrico in questo caso). Verifichiamo che le nuovi classi e l'ereditarietà funzioni correttamente:
  1. Istanziamo dinamicamente un oggetto per ogni classe.
  2. Verifichiamo che su tutti questi operano i metodi accessori di massa e carica di Particella, ma il metodo di stampa delle classi derivate.

Brevi Richiami

Classe Particella

Classe Elettrone

Esempio di programma (scarica un esempio qui )

ESERCIZIO 5.2 - Creazione delle classi CampoVettoriale e PuntoMateriale :
Per risolvere problemi relativi all'elettrostatica o alla gravità proviamo ad effettuare una modellizzazione basata su due elementi principali: una rappresentazione del campo vettoriale e una rappresentazione delle sorgenti dei campi vettoriali.
  • La classe CampoVettoriale (scarica l'header file qui): sono molti i casi in Fisica in cui un vettore è collegato ad un punto dello spazio. Ad esempio una forza ha un punto di applicazione, o i vettori del campo elettrico e campo gravitazionale hanno un valore che varia da punto a punto dello spazio.
    Costruire una classe CampoVettoriale, che erediti dalla classe Posizione :
    1. aggiungere le tre componenti di un vettore alla posizione
    2. implementare i metodi per accedere e/o modificare il vettore
    3. decidere quali costruttori implementare, in particolare, implementare un costruttore CampoVettoriale(const Posizione&) che crei un vettore nullo nella posizione assegnata
    4. implementare un metodo double Modulo() che restituisca la lunghezza del vettore
    5. fare overloading di operator+ e operator+= in modo da poter facilmente sommare campi.

    Header file della classe CampoVettoriale:

  • La classe PuntoMateriale (scarica l'header file qui): questa classe ci servirà per rappresentare le sorgenti dei campi. Costruire la classe in modo che erediti da entrambe le classi Particella e Posizione.
    1. Implementare i costruttori che pensate siano utili.
    2. Implementare il metodo CampoVettoriale CampoElettrico(const Posizione&) const che restituisca il campo elettrico generato dal PuntoMateriale nel punto r (per i più volenterosi anche il metodo CampoVettoriale CampoGravitazionale(const Posizione&) const che restituisca il campo gravitazionale generato dal PuntoMateriale nel punto r).

    Header file della classe PuntoMateriale:
N.B.: per entrambe le classi di cui sopra, sentitevi liberi di aggiungere tutti i metodi addizionali che ritenete utili per risolvere questo esercizio o i successivi.

Brevi Richiami

Ereditarietà multipla

Utilizzo di costruttori delle classi madri

Overloading operatori


ESERCIZIO 5.3 - Calcolo del campo elettrico generato da un dipolo (da consegnare):
Realizzate un programma che costuisca un dipolo costituito da un elettrone e un protone posizionati ad una distanza δ= 10-10 m.
e determini:
  1. il valore del campo elettrico di dipolo prodotto in un punto P le cui coordinate sono inserite da linea di comando
  2. disegni l'andamento del modulo del campo elettrico lungo l'asse del dipolo per una distanza da 100 a 1000 volte δ. Che tipo di andamento ha il campo ? (fate riferimento all'approfondimento seguente sulle leggi di potenza)
Esempio di programma


ESERCIZIO 5.4 - Campo di multipolo (approfondimento):
Scrivere un programma che calcoli il campo elettrico generato da un multipolo di ordine n.
In questo esercizio, un n-polo (con n pari) è una distribuzione di n particelle, in cui la particella i-esima ha carica (-1)ie (dove e è la carica del protone) e si trova nel punto:
(r0cos(2πi/n),r0sin(2πi/n))
dove r0 è il raggio a cui sono messe le cariche.
Verificare che a grande distanza (R>>r0) il campo elettrico varia proporzionalmente a R-2-n/2.
Valutare fino a quali valori di n si riesce a verificare questa dipendenza.
Questo è un problema abbastanza interessante, perché bisogna scegliere una distanza abbastanza grande perché sia valido il comportamento asintotico, ma abbastanza ridotta per evitare problemi di arrotondamento nella somma di molti termini di segno contrario.


ESERCIZIO 5.5 - Gravità dallo spazio (approfondimento):
Il satellite GOCE si trova in orbita a 250 km dalla superficie terrestre e dotato di accelerometri in grado di misurare variazioni dell'accelerazione di gravità fino a δg/g=10-13.
Scopo della missione (si veda questo articolo su Le Scienze) include una mappatura dettagliata del campo gravitazionale terrestre, prodotto dalle distribuzioni non omogenee di massa.
Costruire un programma che :
  1. calcoli l'accelerazione di gravità sul satellite per una Terra perfettamene sferica e dimensioni pari al raggio medio (wikipedia).
  2. calcoli la variazione relativa di g prodotta da una catena montuosa, schematizzata come una fila di 100 sfere di 1 km di raggio poste sopra la superficie media della Terra (usare 3000 kg/m3 come densità della roccia) e produca un grafico della variazione in funzione della posizione del satellite sull'orbita.
Per risolvere questo esercizio si costruisca dapprima il sistema di sorgenti di campo (Terra e catena montuosa). Si calcoli il campo generato da tutte le sorgenti in un punto a distanza dal centro della terra pari al raggio terrestre pi` la distanza del satellite dalla superficie terrestre. Muovere questo punto in modo che percorra tutta ll'orbita ( in passi da 10 Km ).

Schema

Brevi Richiami

Leggi di potenza

Back to Home Page