YASim: move one-liners and add 'const'
This commit is contained in:
parent
cbdbe2882b
commit
fcfc82b471
5 changed files with 30 additions and 109 deletions
|
@ -22,36 +22,34 @@ struct State {
|
||||||
|
|
||||||
// Simple initialization
|
// Simple initialization
|
||||||
State() {
|
State() {
|
||||||
int i;
|
for(int i=0; i<3; i++) {
|
||||||
for(i=0; i<3; i++) {
|
|
||||||
pos[i] = v[i] = rot[i] = acc[i] = racc[i] = 0;
|
pos[i] = v[i] = rot[i] = acc[i] = racc[i] = 0;
|
||||||
int j;
|
for(int j=0; j<3; j++)
|
||||||
for(j=0; j<3; j++)
|
orient[3*i+j] = (i==j) ? 1.0f : 0.0f;
|
||||||
orient[3*i+j] = i==j ? 1.0f : 0.0f;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void posLocalToGlobal(float* lpos, double *gpos) {
|
void posLocalToGlobal(const float* lpos, double *gpos) const {
|
||||||
float tmp[3];
|
float tmp[3];
|
||||||
Math::tmul33(orient, lpos, tmp);
|
Math::tmul33(orient, lpos, tmp);
|
||||||
gpos[0] = tmp[0] + pos[0];
|
gpos[0] = tmp[0] + pos[0];
|
||||||
gpos[1] = tmp[1] + pos[1];
|
gpos[1] = tmp[1] + pos[1];
|
||||||
gpos[2] = tmp[2] + pos[2];
|
gpos[2] = tmp[2] + pos[2];
|
||||||
}
|
}
|
||||||
void posGlobalToLocal(double* gpos, float *lpos) {
|
void posGlobalToLocal(const double* gpos, float *lpos) const {
|
||||||
lpos[0] = (float)(gpos[0] - pos[0]);
|
lpos[0] = (float)(gpos[0] - pos[0]);
|
||||||
lpos[1] = (float)(gpos[1] - pos[1]);
|
lpos[1] = (float)(gpos[1] - pos[1]);
|
||||||
lpos[2] = (float)(gpos[2] - pos[2]);
|
lpos[2] = (float)(gpos[2] - pos[2]);
|
||||||
Math::vmul33(orient, lpos, lpos);
|
Math::vmul33(orient, lpos, lpos);
|
||||||
}
|
}
|
||||||
void velLocalToGlobal(float* lvel, float *gvel) {
|
void velLocalToGlobal(const float* lvel, float *gvel) const {
|
||||||
Math::tmul33(orient, lvel, gvel);
|
Math::tmul33(orient, lvel, gvel);
|
||||||
}
|
}
|
||||||
void velGlobalToLocal(float* gvel, float *lvel) {
|
void velGlobalToLocal(const float* gvel, float *lvel) const {
|
||||||
Math::vmul33(orient, gvel, lvel);
|
Math::vmul33(orient, gvel, lvel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void planeGlobalToLocal(double* gplane, float *lplane) {
|
void planeGlobalToLocal(const double* gplane, float *lplane) const {
|
||||||
// First the normal vector transformed to local coordinates.
|
// First the normal vector transformed to local coordinates.
|
||||||
lplane[0] = (float)-gplane[0];
|
lplane[0] = (float)-gplane[0];
|
||||||
lplane[1] = (float)-gplane[1];
|
lplane[1] = (float)-gplane[1];
|
||||||
|
|
|
@ -2,43 +2,6 @@
|
||||||
#include "Integrator.hpp"
|
#include "Integrator.hpp"
|
||||||
namespace yasim {
|
namespace yasim {
|
||||||
|
|
||||||
void Integrator::setBody(RigidBody* body)
|
|
||||||
{
|
|
||||||
_body = body;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Integrator::setEnvironment(BodyEnvironment* env)
|
|
||||||
{
|
|
||||||
_env = env;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Integrator::setInterval(float dt)
|
|
||||||
{
|
|
||||||
_dt = dt;
|
|
||||||
}
|
|
||||||
|
|
||||||
float Integrator::getInterval()
|
|
||||||
{
|
|
||||||
return _dt;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Integrator::setState(State* s)
|
|
||||||
{
|
|
||||||
_s = *s;
|
|
||||||
}
|
|
||||||
|
|
||||||
State* Integrator::getState()
|
|
||||||
{
|
|
||||||
return &_s;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transforms a "local" vector to a "global" vector (not coordinate!)
|
|
||||||
// using the specified orientation.
|
|
||||||
void Integrator::l2gVector(float* orient, float* v, float* out)
|
|
||||||
{
|
|
||||||
Math::tmul33(orient, v, out);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Updates a position vector for a body c.g. motion with velocity v
|
// Updates a position vector for a body c.g. motion with velocity v
|
||||||
// over time dt, from orientation o0 to o1. Because the position
|
// over time dt, from orientation o0 to o1. Because the position
|
||||||
// references the local coordinate origin, but the velocity is that of
|
// references the local coordinate origin, but the velocity is that of
|
||||||
|
|
|
@ -17,24 +17,24 @@ class Integrator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Sets the RigidBody that will be integrated.
|
// Sets the RigidBody that will be integrated.
|
||||||
void setBody(RigidBody* body);
|
void setBody(RigidBody* body) { _body = body; }
|
||||||
|
|
||||||
// Sets the BodyEnvironment object used to calculate the second
|
// Sets the BodyEnvironment object used to calculate the second
|
||||||
// derivatives.
|
// derivatives.
|
||||||
void setEnvironment(BodyEnvironment* env);
|
void setEnvironment(BodyEnvironment* env) { _env = env; }
|
||||||
|
|
||||||
// Sets the time interval between steps. Units can be anything,
|
// Sets the time interval between steps. Units can be anything,
|
||||||
// but they must match the other values (if you specify speed in
|
// but they must match the other values (if you specify speed in
|
||||||
// m/s, then angular acceleration had better be in 1/s^2 and the
|
// m/s, then angular acceleration had better be in 1/s^2 and the
|
||||||
// time interval should be in seconds, etc...)
|
// time interval should be in seconds, etc...)
|
||||||
void setInterval(float dt);
|
void setInterval(float dt) { _dt = dt; }
|
||||||
float getInterval();
|
float getInterval() const { return _dt; }
|
||||||
|
|
||||||
// The current state, i.e. initial conditions for the next
|
// The current state, i.e. initial conditions for the next
|
||||||
// integration iteration. Note that the acceleration parameters
|
// integration iteration. Note that the acceleration parameters
|
||||||
// in the State object are ignored.
|
// in the State object are ignored.
|
||||||
State* getState();
|
State* getState() { return &_s; }
|
||||||
void setState(State* s);
|
void setState(State* s) { _s = *s; }
|
||||||
|
|
||||||
// Do a 4th order Runge-Kutta integration over one time interval.
|
// Do a 4th order Runge-Kutta integration over one time interval.
|
||||||
// This is the top level of the simulation.
|
// This is the top level of the simulation.
|
||||||
|
@ -43,9 +43,13 @@ public:
|
||||||
private:
|
private:
|
||||||
void orthonormalize(float* m);
|
void orthonormalize(float* m);
|
||||||
void rotMatrix(float* r, float dt, float* out);
|
void rotMatrix(float* r, float dt, float* out);
|
||||||
void l2gVector(float* orient, float* v, float* out);
|
|
||||||
void extrapolatePosition(double* pos, float* v, float dt,
|
// Transforms a "local" vector to a "global" vector (not coordinate!)
|
||||||
float* o1, float* o2);
|
// using the specified orientation.
|
||||||
|
void l2gVector(const float* orient, const float* v, float* out) {
|
||||||
|
Math::tmul33(orient, v, out); }
|
||||||
|
|
||||||
|
void extrapolatePosition(double* pos, float* v, float dt, float* o1, float* o2);
|
||||||
|
|
||||||
BodyEnvironment* _env;
|
BodyEnvironment* _env;
|
||||||
RigidBody* _body;
|
RigidBody* _body;
|
||||||
|
|
|
@ -17,51 +17,6 @@ Thruster::~Thruster()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thruster::getPosition(float* out)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i<3; i++) out[i] = _pos[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::setPosition(float* pos)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i<3; i++) _pos[i] = pos[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::getDirection(float* out)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i<3; i++) out[i] = _dir[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::setDirection(float* dir)
|
|
||||||
{
|
|
||||||
Math::unit3(dir, _dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::setThrottle(float throttle)
|
|
||||||
{
|
|
||||||
_throttle = Math::clamp(throttle, -1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::setMixture(float mixture)
|
|
||||||
{
|
|
||||||
_mixture = Math::clamp(mixture, 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Thruster::setStarter(bool starter)
|
|
||||||
{
|
|
||||||
_starter = starter;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::setWind(float* wind)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i<3; i++) _wind[i] = wind[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
void Thruster::setAir(float pressure, float temp, float density)
|
void Thruster::setAir(float pressure, float temp, float density)
|
||||||
{
|
{
|
||||||
_pressure = pressure;
|
_pressure = pressure;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef _THRUSTER_HPP
|
#ifndef _THRUSTER_HPP
|
||||||
#define _THRUSTER_HPP
|
#define _THRUSTER_HPP
|
||||||
|
#include "Math.hpp"
|
||||||
|
|
||||||
namespace yasim {
|
namespace yasim {
|
||||||
|
|
||||||
|
@ -22,15 +23,15 @@ public:
|
||||||
virtual Engine* getEngine() { return 0; }
|
virtual Engine* getEngine() { return 0; }
|
||||||
|
|
||||||
// Static data
|
// Static data
|
||||||
void getPosition(float* out);
|
void getPosition(float* out) const { Math::set3(_pos, out); }
|
||||||
void setPosition(float* pos);
|
void setPosition(const float* pos) { Math::set3(pos, _pos); }
|
||||||
void getDirection(float* out);
|
void getDirection(float* out) const { Math::set3(_dir, out); }
|
||||||
void setDirection(float* dir);
|
void setDirection(const float* dir) { Math::unit3(dir, _dir); }
|
||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
void setThrottle(float throttle);
|
void setThrottle(float throttle) { _throttle = Math::clamp(throttle, -1, 1); }
|
||||||
void setMixture(float mixture);
|
void setMixture(float mixture) { _mixture = Math::clamp(mixture, 0, 1); }
|
||||||
void setStarter(bool starter);
|
void setStarter(bool starter) { _starter = starter; }
|
||||||
void setFuelState(bool hasFuel) { _fuel = hasFuel; }
|
void setFuelState(bool hasFuel) { _fuel = hasFuel; }
|
||||||
|
|
||||||
// Dynamic output
|
// Dynamic output
|
||||||
|
@ -42,7 +43,7 @@ public:
|
||||||
virtual float getFuelFlow()=0; // in kg/s
|
virtual float getFuelFlow()=0; // in kg/s
|
||||||
|
|
||||||
// Runtime instructions
|
// Runtime instructions
|
||||||
void setWind(float* wind);
|
void setWind(const float* wind) { Math::set3(wind, _wind); };
|
||||||
void setAir(float pressure, float temp, float density);
|
void setAir(float pressure, float temp, float density);
|
||||||
virtual void init() {}
|
virtual void init() {}
|
||||||
virtual void integrate(float dt)=0;
|
virtual void integrate(float dt)=0;
|
||||||
|
|
Loading…
Reference in a new issue