X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FYASim%2FWing.cpp;h=ad15410e17a7a7831e1280849a69253f4635552b;hb=d66903e9ad63b91182ccc25d9bb82f18f8dd98b6;hp=f0a7a616fcf0c448927cbce4d69394f21ed17ddc;hpb=fc565ebd86a24d43c682b2c92d353478dc568e12;p=flightgear.git diff --git a/src/FDM/YASim/Wing.cpp b/src/FDM/YASim/Wing.cpp index f0a7a616f..ad15410e1 100644 --- a/src/FDM/YASim/Wing.cpp +++ b/src/FDM/YASim/Wing.cpp @@ -1,6 +1,7 @@ #include "Math.hpp" #include "Surface.hpp" #include "Wing.hpp" + namespace yasim { Wing::Wing() @@ -176,6 +177,16 @@ void Wing::setFlap0(float lval, float rval) } } +void Wing::setFlap0Effectiveness(float lval) +{ + lval = Math::clamp(lval, 1, 10); + int i; + for(i=0; i<_flap0Surfs.size(); i++) { + ((Surface*)_flap0Surfs.get(i))->setFlapEffectiveness(lval); +// if(_mirror) ((Surface*)_flap0Surfs.get(++i))->setFlapEffectiveness(rval); + } +} + void Wing::setFlap1(float lval, float rval) { lval = Math::clamp(lval, -1, 1); @@ -187,6 +198,16 @@ void Wing::setFlap1(float lval, float rval) } } +void Wing::setFlap1Effectiveness(float lval) +{ + lval = Math::clamp(lval, 1, 10); + int i; + for(i=0; i<_flap1Surfs.size(); i++) { + ((Surface*)_flap1Surfs.get(i))->setFlapEffectiveness(lval); +// if(_mirror) ((Surface*)_flap1Surfs.get(++i))->setFlap(rval); + } +} + void Wing::setSpoiler(float lval, float rval) { lval = Math::clamp(lval, 0, 1); @@ -235,22 +256,25 @@ void Wing::compile() // Have we already been compiled? if(_surfs.size() != 0) return; - // Assemble the start/end coordinates into an array, sort them, + // Assemble the start/end coordinates of all control surfaces + // and the wing itself into an array, sort them, // and remove duplicates. This gives us the boundaries of our // segments. - float bounds[8]; + float bounds[10]; bounds[0] = _flap0Start; bounds[1] = _flap0End; bounds[2] = _flap1Start; bounds[3] = _flap1End; bounds[4] = _spoilerStart; bounds[5] = _spoilerEnd; bounds[6] = _slatStart; bounds[7] = _slatEnd; + //and don't forget the root and the tip of the wing itself + bounds[8] = 0; bounds[9] = 1; // Sort in increasing order int i; - for(i=0; i<8; i++) { + for(i=0; i<10; i++) { int minIdx = i; float minVal = bounds[i]; int j; - for(j=i+1; j<8; j++) { + for(j=i+1; j<10; j++) { if(bounds[j] < minVal) { minIdx = j; minVal = bounds[j]; @@ -259,11 +283,11 @@ void Wing::compile() float tmp = bounds[i]; bounds[i] = minVal; bounds[minIdx] = tmp; } - + // Uniqify float last = bounds[0]; int nbounds = 1; - for(i=1; i<8; i++) { + for(i=1; i<10; i++) { if(bounds[i] != last) bounds[nbounds++] = bounds[i]; last = bounds[i]; @@ -349,7 +373,7 @@ void Wing::compile() sr->surface = s; sr->weight = chord * segWid; s->setTotalDrag(sr->weight); - s->setTwist(_twist * Math::sqrt(frac)); + s->setTwist(_twist * frac); _surfs.add(sr); if(_mirror) { @@ -360,7 +384,7 @@ void Wing::compile() sr->surface = s; sr->weight = chord * segWid; s->setTotalDrag(sr->weight); - s->setTwist(_twist * Math::sqrt(frac)); + s->setTwist(_twist * frac); _surfs.add(sr); } } @@ -433,7 +457,7 @@ Surface* Wing::newSurface(float* pos, float* orient, float chord, int i; for(i=2; i<4; i++) { s->setStall(i, 0.2267f); - s->setStallWidth(i, 1); + s->setStallWidth(i, 0.01); } if(flap0) s->setFlapParams(_flap0Lift, _flap0Drag);