From 8676852722c016b9a7d1602077af07da919b1087 Mon Sep 17 00:00:00 2001 From: "chappuis.daniel" Date: Mon, 29 Jun 2009 19:20:47 +0000 Subject: [PATCH] git-svn-id: https://reactphysics3d.googlecode.com/svn/trunk@149 92aac97c-a6ce-11dd-a772-7fcde58d38e6 --- .../engine/NumericalIntegrator.cpp | 89 ------------------- .../engine/NumericalIntegrator.h | 53 ----------- 2 files changed, 142 deletions(-) delete mode 100644 sources/reactphysics3d/engine/NumericalIntegrator.cpp delete mode 100644 sources/reactphysics3d/engine/NumericalIntegrator.h diff --git a/sources/reactphysics3d/engine/NumericalIntegrator.cpp b/sources/reactphysics3d/engine/NumericalIntegrator.cpp deleted file mode 100644 index c7ae229c..00000000 --- a/sources/reactphysics3d/engine/NumericalIntegrator.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** - * 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 "NumericalIntegrator.h" - -// We want to use the ReactPhysics3D namespace -using namespace reactphysics3d; - -// Constructor -NumericalIntegrator::NumericalIntegrator() { - -} - -// Copy-constructor -NumericalIntegrator::NumericalIntegrator(const NumericalIntegrator& integrator) { - -} - -// Destructor -NumericalIntegrator::~NumericalIntegrator() { - -} - -// Compute a derivative body state at time t -DerivativeBodyState NumericalIntegrator::evaluate(const BodyState& bodyState, const Time& time) { - - // Compute the derivaties values at time t - Vector3D linearVelocity = bodyState.getLinearVelocity(); - Vector3D force = bodyState.computeForce(time); - Vector3D torque = bodyState.computeTorque(time); - Quaternion spin = bodyState.getSpin(); - - // Return the derivative body state at time t - return DerivativeBodyState(linearVelocity, force, torque, spin); -} - -// Compute a derivative body state at time t + dt according to the last derivative body state -DerivativeBodyState NumericalIntegrator::evaluate(BodyState& bodyState, const Time& time, const Time& timeStep, - const DerivativeBodyState& lastDerivativeBodyState) { - // Compute the bodyState at time t + dt - bodyState.computeAtTime(timeStep, lastDerivativeBodyState); - - // Compute the derivaties values at time t - Vector3D linearVelocity = bodyState.getLinearVelocity(); - Vector3D force = bodyState.computeForce(time + timeStep); - Vector3D torque = bodyState.computeTorque(time + timeStep); - Quaternion spin = bodyState.getSpin(); - - // Return the derivative body state at time t - return DerivativeBodyState(linearVelocity, force, torque, spin); -} - -// Integrate a body state over time. This method use the RK4 integration algorithm -void NumericalIntegrator::integrate(BodyState& bodyState, const Time& time, const Time& timeStep) { - // Compute the 4 derivatives body states at different time values. - DerivativeBodyState a = evaluate(bodyState, time); - DerivativeBodyState b = evaluate(bodyState, time, timeStep*0.5, a); - DerivativeBodyState c = evaluate(bodyState, time, timeStep*0.5, b); - DerivativeBodyState d = evaluate(bodyState, time, timeStep, c); - - double dt = timeStep.getValue(); // Timestep - - // Compute the integrated body state - bodyState.setPosition(bodyState.getPosition() + (a.getLinearVelocity() + (b.getLinearVelocity() + c.getLinearVelocity()) * 2.0 + - d.getLinearVelocity()) * (1.0/6.0) * dt); - bodyState.setLinearMomentum(bodyState.getLinearMomentum() + (a.getForce() + (b.getForce() + c.getForce())*2.0 + d.getForce()) * (1.0/6.0) * dt); - bodyState.setOrientation(bodyState.getOrientation() + (a.getSpin() + (b.getSpin() + c.getSpin())*2.0 + d.getSpin()) * (1.0/6.0) * dt); - bodyState.setAngularMomentum(bodyState.getAngularMomentum() + (a.getTorque() + (b.getTorque() + c.getTorque())*2.0 + d.getTorque()) * (1.0/6.0) * dt); - - // Recalculate the secondary values of the body state - bodyState.recalculate(); -} diff --git a/sources/reactphysics3d/engine/NumericalIntegrator.h b/sources/reactphysics3d/engine/NumericalIntegrator.h deleted file mode 100644 index 2f03a548..00000000 --- a/sources/reactphysics3d/engine/NumericalIntegrator.h +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** - * 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 NUMERICALINTEGRATOR_H -#define NUMERICALINTEGRATOR_H - -// Libraries -#include "../body/BodyState.h" -#include "../body/DerivativeBodyState.h" - -// Namespace ReactPhysics3D -namespace reactphysics3d { - -/* ------------------------------------------------------------------- - Class NumericalIntegrator : - This class will be used to solve the differential equation of - movement by integrating a body state. This integrator implements - the RK4 integrator. - ------------------------------------------------------------------- -*/ -class NumericalIntegrator { - private : - DerivativeBodyState evaluate(const BodyState& bodyState, const Time& time); // Compute a derivative body state - DerivativeBodyState evaluate(BodyState& bodyState, const Time& time, - const Time& timeStep, const DerivativeBodyState& lastDerivativeBodyState); // Compute a derivative body state - - public : - NumericalIntegrator(); // Constructor - NumericalIntegrator(const NumericalIntegrator& integrator); // Copy-constructor - virtual ~NumericalIntegrator(); // Destructor - - void integrate(BodyState& bodyState, const Time& t, const Time& dt); // Integrate a body state over time -}; - -} - -#endif