_slatDrag = _spoilerDrag = _flapDrag = 1;
_flapLift = 0;
+ _flapEffectiveness = 1;
_slatAlpha = 0;
_spoilerLift = 1;
_inducedDrag = 1;
_flapPos = pos;
}
+void Surface::setFlapEffectiveness(float effectiveness)
+{
+ _flapEffectiveness = effectiveness;
+}
+
+double Surface::getFlapEffectiveness()
+{
+ return _flapEffectiveness;
+}
+
+
void Surface::setSlat(float pos)
{
_slatPos = pos;
return;
}
+ // special case this so the logic below doesn't produce a non-zero
+ // force; should probably have a "no force" flag instead...
+ if(_cx == 0. && _cy == 0. && _cz == 0.) {
+ for(int i=0; i<3; i++) out[i] = torque[i] = 0.;
+ return;
+ }
+
Math::mul3(1/vel, v, out);
// Convert to the surface's coordinates
// stall alpha
float Surface::flapLift(float alpha)
{
- float flapLift = _cz * _flapPos * (_flapLift-1);
+ float flapLift = _cz * _flapPos * (_flapLift-1) * _flapEffectiveness;
+
+ if(_stalls[0] == 0)
+ return 0;
if(alpha < 0) alpha = -alpha;
if(alpha < _stalls[0])
return flapLift;
else if(alpha > _stalls[0] + _widths[0])
- return 1;
+ return 0;
float frac = (alpha - _stalls[0]) / _widths[0];
frac = frac*frac*(3-2*frac);
- return flapLift * (1-frac) + frac;
+ return flapLift * (1-frac);
}
float Surface::controlDrag(float lift, float drag)