#define MAXX 100 #define MAXY 100 #define KMOLLA 0.4 #define DT .05 #define G 5 #include "TCanvas.h" #include "TH2F.h" #include "TLine.h" #include using namespace std; class Palla{ public: Palla(float x, float y, float m); void evolvi(const Palla& altraPalla); float x() const{ return xPos; } float y() const{ return yPos; } float vx() const{ return velX; } float vy() const{ return velY; } float m() const{ return massa; } private: float dist(const Palla&) const; float cosX(const Palla&) const; float cosY(const Palla&) const; float xPos, yPos, massa; float velX, velY; }; Palla::Palla(float x, float y, float m){ xPos = x; yPos = y; massa = m; velX=0; velY=0; } float Palla::dist(const Palla& p) const { return (sqrt((xPos-p.x())*(xPos-p.x())+ (xPos-p.y())*(xPos-p.y()))); } float Palla::cosX(const Palla& p) const { return (xPos-p.x())/dist(p); } float Palla::cosY(const Palla& p) const { return (yPos-p.y())/dist(p); } void Palla::evolvi(const Palla& p){ float d = dist(p); float ax = -(d-5)/massa*KMOLLA*cosX(p); float ay = -(d-5)/massa*KMOLLA*cosY(p)-G; velX += ax*DT; velY += ay*DT; xPos+=velX*DT; yPos+=velY*DT; // // controlla il bordo // if (xPos <= 0) { xPos=0; velX= -velX; } if (xPos >= MAXX) { xPos=MAXX; velX= -velX; } if (yPos <= 0) { yPos=0; velY= -velY; } if (yPos >= MAXY) { yPos=MAXY; velY= -velY; } } void display(Palla p1, Palla p2){ static TCanvas * canvas = new TCanvas; TH2F histo("fff","Tavolo",40,0,100,40,0,100); histo.Fill(p1.x(), p1.y(), p1.m()); histo.Fill(p2.x(), p2.y(), p2.m()); histo.DrawCopy("zcol"); static TLine* theSpring = 0; delete theSpring; theSpring = new TLine(p1.x(), p1.y(), p2.x(), p2.y()); theSpring->Draw(); canvas->Update(); } int rimbalzo2(int maxIter= 100){ Palla palla1 (1000,10,2); Palla palla2 (60,80,20); int i=0; while(i < maxIter){ palla1.evolvi(palla2); palla2.evolvi(palla1); // cout <<" PALLA 1 "<