diff --git a/sources/reactphysics3d/engine/Euler.cpp b/sources/reactphysics3d/engine/Euler.cpp new file mode 100644 index 00000000..38614711 --- /dev/null +++ b/sources/reactphysics3d/engine/Euler.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** + * Copyright (C) 2009 Daniel Chappuis * + **************************************************************************** + * This file is part of ReactPhysics3D. * + * * + * ReactPhysics3D is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License as published * + * by the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * ReactPhysics3D is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public License * + * along with ReactPhysics3D. If not, see . * + ***************************************************************************/ + +// Libraries +#include "Euler.h" + +// We want to use the ReactPhysics3D namespace +using namespace reactphysics3d; + +// Constructor +Euler::Euler() { + +} + +// Copy-constructor +Euler::Euler(const Euler& euler) { + +} + +// Destructor +Euler::~Euler() { + +} + +// Integrate a body state over time. This method use the Euler integration algorithm +void Euler::integrate(BodyState& bodyState, const Time& time, const Time& timeStep) { + double dt = timeStep.getValue(); // Timestep + + // Compute the integrated body state + bodyState.setPosition(bodyState.getPosition() + bodyState.getLinearVelocity() * dt); + bodyState.setLinearMomentum(bodyState.getLinearMomentum() + bodyState.computeForce(time) * dt); + bodyState.setOrientation(bodyState.getOrientation() + bodyState.getSpin() * dt); + bodyState.setAngularMomentum(bodyState.getAngularMomentum() + bodyState.computeTorque(time) * dt); + + // Recalculate the secondary values of the body state + bodyState.recalculate(); +} diff --git a/sources/reactphysics3d/engine/Euler.h b/sources/reactphysics3d/engine/Euler.h new file mode 100644 index 00000000..71edade4 --- /dev/null +++ b/sources/reactphysics3d/engine/Euler.h @@ -0,0 +1,53 @@ +/**************************************************************************** +* Copyright (C) 2009 Daniel Chappuis * +**************************************************************************** +* This file is part of ReactPhysics3D. * +* * +* ReactPhysics3D is free software: you can redistribute it and/or modify * +* it under the terms of the GNU Lesser General Public License as published * +* by the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* ReactPhysics3D is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU Lesser General Public License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with ReactPhysics3D. If not, see . * +***************************************************************************/ + +#ifndef EULER_H +#define EULER_H + +// Libraries +#include "IntegrationAlgorithm.h" +#include "../body/BodyState.h" +#include "../body/DerivativeBodyState.h" + +// Namespace ReactPhysics3D +namespace reactphysics3d { + +/* ------------------------------------------------------------------- + Class Euler : + This class will be used to solve the differential equation of + movement by integrating a body state. This class implements + the Euler algorithm. It's important to undersand that Euler + algorithm should be used only for testing purpose because the + Euler algorithm is not a good one. + ------------------------------------------------------------------- +*/ +class Euler : public IntegrationAlgorithm { + private : + + public : + Euler(); // Constructor + Euler(const Euler& euler); // Copy-constructor + virtual ~Euler(); // Destructor + + void integrate(BodyState& bodyState, const Time& t, const Time& dt); // Integrate a body state over time +}; + +} + +#endif diff --git a/sources/reactphysics3d/engine/IntegrationAlgorithm.cpp b/sources/reactphysics3d/engine/IntegrationAlgorithm.cpp new file mode 100644 index 00000000..9490229b --- /dev/null +++ b/sources/reactphysics3d/engine/IntegrationAlgorithm.cpp @@ -0,0 +1,34 @@ +/**************************************************************************** +* Copyright (C) 2009 Daniel Chappuis * +**************************************************************************** +* This file is part of ReactPhysics3D. * +* * +* ReactPhysics3D is free software: you can redistribute it and/or modify * +* it under the terms of the GNU Lesser General Public License as published * +* by the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* ReactPhysics3D is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU Lesser General Public License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with ReactPhysics3D. If not, see . * +***************************************************************************/ + +// Libraries +#include "IntegrationAlgorithm.h" + +// Namespace +using namespace reactphysics3d; + +// Constructor +IntegrationAlgorithm::IntegrationAlgorithm() { + +} + +// Destructor +IntegrationAlgorithm::~IntegrationAlgorithm() { + +} diff --git a/sources/reactphysics3d/engine/IntegrationAlgorithm.h b/sources/reactphysics3d/engine/IntegrationAlgorithm.h new file mode 100644 index 00000000..669fec5c --- /dev/null +++ b/sources/reactphysics3d/engine/IntegrationAlgorithm.h @@ -0,0 +1,42 @@ +/**************************************************************************** +* Copyright (C) 2009 Daniel Chappuis * +**************************************************************************** +* This file is part of ReactPhysics3D. * +* * +* ReactPhysics3D is free software: you can redistribute it and/or modify * +* it under the terms of the GNU Lesser General Public License as published * +* by the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* ReactPhysics3D is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU Lesser General Public License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with ReactPhysics3D. If not, see . * +***************************************************************************/ + +#ifndef INTEGRATIONALGORITHM_H +#define INTEGRATIONALGORITHM_H + +// Libraries +#include "../body/BodyState.h" +#include "../physics/physics.h" + +// ReactPhysics3D namespace +namespace reactphysics3d { + +class IntegrationAlgorithm { + private : + + public : + IntegrationAlgorithm(); // Constructor + virtual ~IntegrationAlgorithm(); // Destructor + + virtual void integrate(BodyState& bodyState, const Time& t, const Time& dt)=0; // Integrate a body state over time +}; + +} // End of the ReactPhysics3D namespace + +#endif