Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F94111457
ressort.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Dec 4, 00:23
Size
2 KB
Mime Type
text/x-c
Expires
Fri, Dec 6, 00:23 (1 d, 11 h)
Engine
blob
Format
Raw Data
Handle
22737845
Attached To
rSYMKIT symkit
ressort.cpp
View Options
#include "ressort.h"
#include <cmath>
#include <iostream>
using namespace std;
Ressort::Ressort(const Vector& p, const Vector& p_prime, const Vector& axe, const double& l,const double& m,const double& k, const double& fr, const double& g, integral_operation op)
: OscillateurSimple(p, p_prime, op), k(k), fr(fr), l(l), m(m), g(g), axe(axe.unit())
{
adjust(1); // corrige la dimension de vitesse et position
}
Ressort::Ressort(const std::vector<double>& p, const std::vector<double>& p_prime, const std::vector<double>& axe, const double& l,const double& m,const double& k, const double& fr, const double& g, integral_operation op)
: OscillateurSimple(p, p_prime, op), k(k), fr(fr), l(l), m(m), g(g)
{
this->setAxe(Vector(axe)); // rends l'axe de direction unitaire, pour faciliter les calculs de projection
adjust(1); // corrige la dimension de vitesse et position
}
Vector Ressort::equation() const
{
Vector y({0,-g,0});
return {-(k/m)*(p[0]-l)-(fr/m)*p_prime[0]+y*axe};
}
double Ressort::getk() const
{
return k;
}
double Ressort::getg() const
{
return g;
}
double Ressort::getl() const
{
return l;
}
double Ressort::getfr() const
{
return fr;
}
double Ressort::getm() const
{
return m;
}
/*
SVector<3> Ressort::getOrigine() const
{
return origine;
}
*/
const Vector& Ressort::getAxe() const
{
return axe;
}
#include "skerror.h"
using namespace symkit;
//pour lancer des erreurs en cas de valeurs physiquement incohèrente
void Ressort::setk(const double& k)
{
if (k<0)
throw SKError(ERR_NUMERICAL, "setk", "PenduleRessort", "trying to set to an incoherent value", false);
this->k=k;
}
void Ressort::setfr(const double& fr)
{
if (fr<0)
throw SKError(ERR_NUMERICAL, "setfr", "Ressort", "trying to set to an incoherent value", false);
this->fr=fr;
}
void Ressort::setl(const double& l)
{
this->l=l;
}
void Ressort::setm(const double& m)
{
if (m<=0)
throw SKError(ERR_NUMERICAL, "setm", "Ressort", "trying to set to an incoherent value", false);
this->m=m;
}
void Ressort::setg(const double& g)
{
if (g<0)
throw SKError(ERR_NUMERICAL, "setg", "Ressort", "trying to set to an incoherent value", false);
this->g=g;
}
/*void Ressort::setOrigine(const std::vector<double>& origine)
{
this->origine=origine;
}
*/
/*
void Ressort::setOrigine(const SVector<3>& v)
{
origine=v;
}
*/
void Ressort::setAxe(const Vector & v)
{
axe = v.unit(); // set l'axe de direction à la reduction unitaire du vecteur en argument
}
SVector<3> Ressort::cartesiennes() const
{
double x, y, z;
Vector xi({1,0,0}), yi({0,1,0}), zi({0,0,1});
x=((axe*p[0])*xi);
y=((axe*p[0])*yi);
z=((axe*p[0])*zi);
return {x, y, z}; // retourne le vecteur position du ressort
}
double Ressort::kineticEnergy() const
{
return 0.5 * m * p_prime.sq_module();
}
Event Timeline
Log In to Comment