Advertisement
Guest User

Untitled

a guest
May 7th, 2012
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.08 KB | None | 0 0
  1. //DoublePendulum.h
  2.  
  3. #ifndef DoublePendulum_H
  4. #define DoublePendulum_H
  5. #endif
  6.  
  7. #include "Pendulum.h"
  8.  
  9. class DoublePendulum
  10. {
  11. public:
  12.     DoublePendulum (Pendulum &, Pendulum &, const double &);
  13.     DoublePendulum (DoublePendulum &);
  14.     Pendulum getUp ();
  15.     Pendulum getDown ();
  16.     double getG ();
  17.     DoublePendulum operator+ (DoublePendulum &);
  18.     DoublePendulum operator= (DoublePendulum &);
  19.     DoublePendulum operator* (const double &);
  20.     DoublePendulum Derivate();
  21.  
  22. private:
  23.     Pendulum Up;
  24.     Pendulum Down;
  25.     const double g;
  26. };
  27.  
  28. //Implementation
  29.  
  30. #include "DoublePendulum.h"
  31. #include <cmath>
  32.  
  33. DoublePendulum::DoublePendulum(Pendulum &Up, Pendulum &Down, const double &g)
  34.     :Up(Up),Down(Down),g(g)
  35. {}
  36.  
  37. DoublePendulum::DoublePendulum(DoublePendulum &DoublePendulumA)
  38.     :Up(DoublePendulumA.getUp()),Down(DoublePendulumA.getDown()),g(DoublePendulumA.getG())
  39. {}
  40.  
  41. Pendulum DoublePendulum::getUp ()
  42. {
  43.     return Up;
  44. }
  45.  
  46. Pendulum DoublePendulum::getDown ()
  47. {
  48.     return Down;
  49. }
  50.  
  51. double DoublePendulum::getG()
  52. {
  53.     return g;
  54. }
  55.  
  56. DoublePendulum DoublePendulum::operator+ (DoublePendulum &DoublePendulumA)
  57. {
  58.     return DoublePendulum(Up+DoublePendulumA.getUp(),Down+DoublePendulumA.getDown(),DoublePendulumA.getG());
  59. }
  60.  
  61. DoublePendulum DoublePendulum::operator= (DoublePendulum &DoublePendulumA)
  62. {
  63.     return DoublePendulum (DoublePendulumA);
  64. }
  65.  
  66. DoublePendulum DoublePendulum::operator* (const double &a)
  67. {
  68.     return DoublePendulum(Up*a,Down*a,g);
  69. }
  70. DoublePendulum DoublePendulum::Derivate()
  71. {
  72.     Pendulum dUp(Up.getM(),Up.getL(),Up.getOmega(),0);
  73.     Pendulum dDown(Down.getM(),Down.getL(),Down.getOmega(),0);
  74.  
  75.     double m1=Up.getM(),m2=Down.getM(),M=m1+m2,l1=Up.getL(),l2=Down.getL(),theta1=Up.getTheta(),theta2=Down.getTheta(),dTheta=theta2-theta1,omega1=Up.getOmega(),omega2=Down.getOmega();
  76.    
  77.     dUp.setOmega((m2*l1*omega1*omega1*sin(dTheta)*cos(dTheta)+m2*g*sin(theta2)*cos(dTheta)+m2*l2*omega2*omega2*sin(dTheta)-M*g*sin(theta1))/(M*l1-m2*l2*cos(dTheta)*cos(dTheta)));
  78.     dDown.setOmega((-m2*l2*omega2*omega2*sin(dTheta)*cos(dTheta)+M*(g*sin(theta1)*cos(dTheta)-l1*omega1*omega1*sin(dTheta)-g*sin(theta2)))/(M*l2-m2*l2*cos(dTheta)*cos(dTheta)));
  79.    
  80.     return DoublePendulum(dUp,dDown,g);
  81. }
  82.  
  83. //Pendulum.h
  84.  
  85. #ifndef Pendulum_H
  86. #define Pendulum_H
  87. #endif
  88.  
  89. #include <string>
  90. #include <iostream>
  91. using namespace std;
  92.  
  93. class Pendulum
  94. {
  95.     public:
  96.         Pendulum (const double &, const double &, double, double);
  97.         Pendulum (Pendulum &);
  98.         double getL () const;
  99.         double getM () const;
  100.         double getTheta () const;
  101.         double getOmega () const;
  102.         void setTheta (const double &);
  103.         void setOmega (const double &);
  104.         Pendulum operator+ (Pendulum &) const;
  105.         Pendulum operator= (Pendulum &) const;
  106.         Pendulum operator* (const double) const;
  107.     private:
  108.         const double l,m;
  109.         double theta;
  110.         double omega;
  111.         double check (const double,const string);
  112. };
  113.  
  114. //Implementation:
  115.  
  116. #include "Pendulum.h"
  117. using namespace std;
  118.  
  119. Pendulum::Pendulum (const double &L, const double &M, double Theta, double Omega)
  120.     :l(check(L,"L")), m(check(M,"M")),theta(Theta),omega(Omega)
  121. {}
  122.  
  123. Pendulum::Pendulum(Pendulum &PendulumA)
  124.     :m(check(PendulumA.getM(),"M")), l(check(PendulumA.getL(),"L")),theta(PendulumA.getTheta()),omega(PendulumA.getOmega())
  125. {}
  126.  
  127. double Pendulum::check(const double x,const string str)
  128. {
  129.     if (x < 0)
  130.     {
  131.         cout << "Error: " << str << " must be positive. Exiting program." << endl;
  132.         exit;
  133.     }
  134.     return x;
  135. }
  136.  
  137. double Pendulum::getL() const
  138. {
  139.     return l;
  140. }
  141.  
  142. double Pendulum::getM() const
  143. {
  144.     return m;
  145. }
  146.  
  147. double Pendulum::getTheta() const
  148. {
  149.     return theta;
  150. }
  151.  
  152. double Pendulum::getOmega() const
  153. {
  154.     return omega;
  155. }
  156.  
  157. void Pendulum::setTheta (const double &newTheta)
  158. {
  159.     theta=newTheta;
  160. }
  161.  
  162. void Pendulum::setOmega(const double &newOmega)
  163. {
  164.     omega=newOmega;
  165. }
  166.  
  167. Pendulum Pendulum::operator+ (Pendulum &PendulumA) const
  168. {
  169.     return Pendulum (m,l,theta+PendulumA.getTheta(),omega+PendulumA.getOmega());
  170. }
  171.  
  172. Pendulum Pendulum::operator= (Pendulum &PendulumA) const
  173. {
  174.     return Pendulum (PendulumA);
  175. }
  176.  
  177. Pendulum Pendulum::operator* (const double a) const
  178. {
  179.     return Pendulum (m,l,theta*a,omega*a);
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement