#include "CorpoCeleste.h" #include "SistemaSolare.h" #include "Sonda.h" #include #include #include #include #include #include #include #include #include #include TCanvas *screen; TPolyMarker **pm; using namespace std; void output(vector corpi) { vector::const_iterator corpo = corpi.begin(); int count = 0; while (corpo != corpi.end()) { double x = (*corpo)->X().X()*400/1e15; double y = (*corpo)->X().Y()*400/1e15; pm[count]->SetPoint(0, x, y); float size = 0.2*(log10((*corpo)->m())-20); if (size<0) { size = .5; } pm[count++]->SetMarkerSize(size); corpo++; } screen->Modified(); screen->Update(); } TROOT gRoot("PianetiAnimati", "Pianeti Animati"); int main(int argc, char **argv) { TApplication myApp("App", &argc, argv); SistemaSolare ss; cout << "Scegli fra i seguenti set inserendo un numero" << endl; cout << "1) Sistema Solare con Voyager che orbita tra i pianeti interni" << endl; cout << "2) Sistema Solare con Giove molto piu' massiccio del normale" << endl; cout << "3) Sistema Solare con Giove pesante e diretto verso il Sole " << endl; cout << "4) Sistema Solare con Giove e Saturno pesanti " << endl; cout << "Gli altri numeri simulano un normale sistema solare" << endl; cout << "Input set :"; int set = 0; cin >> set; CorpoCeleste sole(1.98e30); CorpoCeleste mercurio(3.28e24); CorpoCeleste venere(4.83e24); CorpoCeleste terra(5.98e24); CorpoCeleste marte(6.37e23); CorpoCeleste giove(1.9e27); CorpoCeleste saturno(5.67e26); Sonda voyager(110000.); sole.setX0(vettore(0., 0.)); sole.setV0(vettore(0., 0.)); mercurio.setX0(vettore(6.99e10, 0.)); mercurio.setV0(vettore(0., 43479.17)); venere.setX0(vettore(1.09e11, 0.)); venere.setV0(vettore(0., 34840.23)); terra.setX0(vettore(1.52e11, 0.)); terra.setV0(vettore(0., 29476.35)); marte.setX0(vettore(2.49e11, 0.)); marte.setV0(vettore(0., 23025.48)); giove.setX0(vettore(0., 8.16e11)); giove.setV0(vettore(-12723.41, 0.)); saturno.setX0(vettore(1.50e12, 0.)); saturno.setV0(vettore(0., 9370.69)); voyager.setV0(vettore(24500., 64000.)); if (set == 1) { cout << "Il voyager ha una velocita' minore e rimane tra i pianeti interni" << endl; voyager.setV0(vettore(-24500., 20000.)); } else if (set == 2) { cout << "Giove ha la massa vicina a quella del Sole" << endl; giove.setMass(1.e30); } else if (set == 3) { cout << "Giove ha la massa vicina a quella del Sole e i due corpi si vanno incontro" << endl; giove.setMass(1.e30); giove.setV0(vettore(1000., -12723.41)); sole.setV0(vettore(-1000., 12723.41)); } else if (set == 4) { cout << "Giove e Saturno hanno una massa vicina a quella del Sole" << endl; giove.setMass(1.e30); saturno.setMass(1.e30); } voyager.setOrigin(&terra); voyager.setStartTime(180*86400.); voyager.accendiRazzi(400*86400,vettore(-5000., 0.)); ss.aggiungiCorpo(&sole); ss.aggiungiCorpo(&mercurio); ss.aggiungiCorpo(&venere); ss.aggiungiCorpo(&terra); ss.aggiungiCorpo(&marte); ss.aggiungiCorpo(&giove); ss.aggiungiCorpo(&saturno); ss.aggiungiCorpo(&voyager); ss.setMaxTime(20*3.16e7); ss.setDeltaT(86400.); screen = new TCanvas("c1", "My Solar System", 0, 0, 800, 800); screen->SetFillColor(1); TView *view = TView::CreateView(1); view->SetRange(-400,-400,-400,400,400,400); pm = new TPolyMarker*[ss.nCorpi()]; for (int i=0; iSetMarkerStyle(20); pm[i]->SetMarkerColor(10-i); pm[i]->SetMarkerSize(20); pm[i]->Draw(); } screen->Update(); ss.evolvi(&output); cout << "Simulazione finita..."; cin >> set; return 0; }