]> git.mxchange.org Git - flightgear.git/commitdiff
Fixes from Maik Justus:
authorandy <andy>
Mon, 7 Aug 2006 16:49:26 +0000 (16:49 +0000)
committerandy <andy>
Mon, 7 Aug 2006 16:49:26 +0000 (16:49 +0000)
+ The wing compilation step was accidentally omitting regions that lie
  between the tips and the first/last control object.  That's a real
  problem for wings that contain no controls, and a significant issue
  for those that contain only a few.  I'm stunned that this went
  undetected for so long.
+ The Surface::flapLift() function was oddly returning 1.0 Newtons as
  a minimum, instead of zero.

src/FDM/YASim/Surface.cpp
src/FDM/YASim/Wing.cpp

index 8e7bafaa65790f8f4c93f580e7c3357418e07eb8..0f0a40877f39dfea91dfd82ead785b461aaac947 100644 (file)
@@ -300,11 +300,11 @@ float Surface::flapLift(float 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)
index 5c9fd6a33a6b1542fea0fe874b1a3bc6fbdf8d08..12fb438f1482ba8919becf109575256576e17486 100644 (file)
@@ -235,22 +235,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 +262,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];