1
0
Fork 0
flightgear/src/FDM/YASim/Gear.hpp

132 lines
4.2 KiB
C++

#ifndef _GEAR_HPP
#define _GEAR_HPP
class SGMaterial;
namespace yasim {
class RigidBody;
struct State;
// A landing gear has the following parameters:
//
// position: a point in the aircraft's local coordinate system where the
// fully-extended wheel will be found.
// compression: a vector from position where a fully-compressed wheel
// will be, also in aircraft-local coordinates.
// spring coefficient: force coefficient along the compression axis, in
// Newtons per meter.
// damping coefficient: force per compression speed, in Ns/m
// static coefficient of friction: force along the ground plane exerted
// by a motionless wheel. A unitless scalar.
// dynamic coefficient of friction: force along the ground plane exerted
// by a sliding/skidding wheel.
// braking fraction: fraction of the dynamic friction that will be
// actually exerted by a rolling wheel
// rotation: the angle from "forward" by which the wheel is rotated
// around its compression axis. In radians.
//
class Gear {
public:
Gear();
// Externally set values
void setPosition(float* position);
void setCompression(float* compression);
void setSpring(float spring);
void setDamping(float damping);
void setStaticFriction(float sfric);
void setDynamicFriction(float dfric);
void setBrake(float brake);
void setRotation(float rotation);
void setExtension(float extension);
void setCastering(bool castering);
void setOnWater(bool c);
void setOnSolid(bool c);
void setSpringFactorNotPlaning(float f);
void setSpeedPlaning(float s);
void setReduceFrictionByExtension(float s);
void setInitialLoad(float l);
void setIgnoreWhileSolving(bool c);
void setGlobalGround(double* global_ground, float* global_vel,
double globalX, double globalY,
int type, const SGMaterial *material);
void getPosition(float* out);
void getCompression(float* out);
void getGlobalGround(double* global_ground);
float getSpring();
float getDamping();
float getStaticFriction();
float getDynamicFriction();
float getBrake();
float getRotation();
float getExtension();
float getInitialLoad() {return _initialLoad; }
bool getCastering();
float getCasterAngle() { return _casterAngle; }
float getRollSpeed() { return _rollSpeed; }
float getBumpAltitude();
bool getGroundIsSolid();
float getGroundFrictionFactor() { return (float)_ground_frictionFactor; }
// Takes a velocity of the aircraft relative to ground, a rotation
// vector, and a ground plane (all specified in local coordinates)
// and make a force and point of application (i.e. ground contact)
// available via getForce().
void calcForce(RigidBody* body, State* s, float* v, float* rot);
// Computed values: total force, weight-on-wheels (force normal to
// ground) and compression fraction.
void getForce(float* force, float* contact);
float getWoW();
float getCompressFraction();
float getCompressDist() { return _compressDist; }
bool getSubmergable() {return (!_ground_isSolid)&&(!_isContactPoint); }
bool getIgnoreWhileSolving() {return _ignoreWhileSolving; }
void setContactPoint(bool c);
private:
float calcFriction(float wgt, float v);
float calcFrictionFluid(float wgt, float v);
bool _castering;
float _pos[3];
float _cmpr[3];
float _spring;
float _damp;
float _sfric;
float _dfric;
float _brake;
float _rot;
float _extension;
float _force[3];
float _contact[3];
float _wow;
float _frac;
float _initialLoad;
float _compressDist;
double _global_ground[4];
float _global_vel[3];
float _casterAngle;
float _rollSpeed;
bool _isContactPoint;
bool _onWater;
bool _onSolid;
float _spring_factor_not_planing;
float _speed_planing;
float _reduceFrictionByExtension;
bool _ignoreWhileSolving;
int _ground_type;
double _ground_frictionFactor;
double _ground_rollingFriction;
double _ground_loadCapacity;
double _ground_loadResistance;
double _ground_bumpiness;
bool _ground_isSolid;
double _global_x;
double _global_y;
};
}; // namespace yasim
#endif // _GEAR_HPP