Program Listing for File TimeIntegration.h
↰ Return to documentation for file (PositionBasedDynamics/TimeIntegration.h)
#ifndef TIMEINTEGRATION_H
#define TIMEINTEGRATION_H
#include "Common/Common.h"
// ------------------------------------------------------------------------------------
namespace PBD
{
class TimeIntegration
{
public:
static void semiImplicitEuler(
const Real h,
const Real mass,
Vector3r &position,
Vector3r &velocity,
const Vector3r &acceleration);
// -------------- semi-implicit Euler (symplectic Euler) for rotational part of a rigid body -----------------
static void semiImplicitEulerRotation(
const Real h,
const Real mass,
const Matrix3r& invertiaW,
const Matrix3r &invInertiaW,
Quaternionr &rotation,
Vector3r &angularVelocity,
const Vector3r &torque);
// -------------- velocity update (first order) -----------------------------------------------------
static void velocityUpdateFirstOrder(
const Real h,
const Real mass,
const Vector3r &position, // position after constraint projection at time t+h
const Vector3r &oldPosition, // position before constraint projection at time t
Vector3r &velocity);
// -------------- angular velocity update (first order) ------------------------------------------------
static void angularVelocityUpdateFirstOrder(
const Real h,
const Real mass,
const Quaternionr &rotation, // rotation after constraint projection at time t+h
const Quaternionr &oldRotation, // rotation before constraint projection at time t
Vector3r &angularVelocity);
// -------------- velocity update (second order) -----------------------------------------------------
static void velocityUpdateSecondOrder(
const Real h,
const Real mass,
const Vector3r &position, // position after constraint projection at time t+h
const Vector3r &oldPosition, // position before constraint projection at time t
const Vector3r &positionOfLastStep, // position of last simulation step at time t-h
Vector3r &velocity);
// -------------- angular velocity update (second order) ------------------------------------------------
static void angularVelocityUpdateSecondOrder(
const Real h,
const Real mass,
const Quaternionr &rotation, // rotation after constraint projection at time t+h
const Quaternionr &oldRotation, // rotation before constraint projection at time t
const Quaternionr &rotationOfLastStep, // rotation of last simulation step at time t-h
Vector3r &angularVelocity);
};
}
#endif