diff options
| -rw-r--r-- | creator.py | 63 | 
1 files changed, 32 insertions, 31 deletions
| @@ -45,9 +45,7 @@ class Coordinates:      def __init__(self, chord, semi_span):          # Global dimensions -        self.chord = chord -        if chord < 10: -            self.chord = 10 +        self.chord = chord if chord > 10 else 10          self.semi_span = semi_span          # mass and area          self.mass = float() @@ -164,12 +162,12 @@ class Airfoil(Coordinates):              x_c = x              y_c = float()              if 0 <= x < p_c: -                y_c = (m / (p**2)) * (2 * p * (x / self.chord) - -                                      (x / self.chord)**2) +                y_c = (m / (p**2)) * (2 * p * (x / self.chord) +                                      - (x / self.chord)**2)              elif p_c <= x <= self.chord: -                y_c = (m / -                       ((1 - p)**2)) * ((1 - 2 * p) + 2 * p * -                                        (x / self.chord) - (x / self.chord)**2) +                y_c = (m / ((1 - p)**2)) * ((1 - 2 * p) +                                            + 2 * p * (x / self.chord) +                                            - (x / self.chord)**2)              else:                  print('x-coordinate for camber is out of bounds. '                        'Check that 0 < x <= chord.') @@ -181,29 +179,23 @@ class Airfoil(Coordinates):              """              y_t = float()              if 0 <= x <= self.chord: -                y_t = 5 * t * self.chord * (0.2969 * sqrt(x / self.chord) - -                                            0.1260 * -                                            (x / self.chord) - 0.3516 * -                                            (x / self.chord)**2 + 0.2843 * -                                            (x / self.chord)**3 - 0.1015 * -                                            (x / self.chord)**4) +                y_t = 5 * t * self.chord * ( +                    +0.2969 * sqrt(x / self.chord) +                    - 0.1260 * (x / self.chord) +                    - 0.3516 * (x / self.chord)**2 +                    + 0.2843 * (x / self.chord)**3 +                    - 0.1015 * (x / self.chord)**4)              else:                  print('x-coordinate for thickness is out of bounds. '                        'Check that 0 < x <= chord.')              return y_t -        def get_dy_c(x): -            """ -            Returns dy_c/dx from 1 'x' along the airfoil chord. -            """ +        def get_theta(x):              dy_c = float()              if 0 <= x < p_c:                  dy_c = ((2 * m) / p**2) * (p - x / self.chord)              elif p_c <= x <= self.chord:                  dy_c = (2 * m) / ((1 - p)**2) * (p - x / self.chord) -            return dy_c - -        def get_theta(dy_c):              theta = atan(dy_c)              return theta @@ -211,10 +203,11 @@ class Airfoil(Coordinates):              x_u = float()              z_u = float()              if 0 <= x < self.chord: -                x_u = x - self.y_t[x] * sin(self.theta[x]) -                z_u = self.y_c[x] + self.y_t[x] * cos(self.theta[x]) +                x_u = x - get_thickness(x) * sin(get_theta(x)) +                z_u = get_camber(x)[1] + get_thickness(x) * \ +                    cos(get_theta(x))              elif x == self.chord: -                x_u = x - self.y_t[x] * sin(self.theta[x]) +                x_u = x - get_thickness(x) * sin(get_theta(x))                  z_u = 0  # Make upper curve finish at y = 0              return (x_u, z_u) @@ -222,20 +215,28 @@ class Airfoil(Coordinates):              x_l = float()              z_l = float()              if 0 <= x < self.chord: -                x_l = (x + self.y_t[x] * sin(self.theta[x])) -                z_l = (self.y_c[x] - self.y_t[x] * cos(self.theta[x])) +                x_l = (x + get_thickness(x) * sin(get_theta(x))) +                z_l = (get_camber(x)[1] - get_thickness(x) +                       * cos(get_theta(x)))              elif x == self.chord: -                x_l = (x + self.y_t[x] * sin(self.theta[x])) +                x_l = (x + get_thickness(x) * sin(get_theta(x)))                  z_l = 0  # Make lower curve finish at y = 0              return (x_l, z_l) -        # Generate all our wing geometries from previous sub-functions -        for x in range(0, self.chord + 1): +        # Generate our airfoil geometry from previous sub-functions. +        # Geometry is densest at leading edge: airfoil slope is highest here. +        x_chord_10_percent = round(self.chord / 10) +        # Densify x-coordinates 10 times for first 10% of the chord length +        x_chord = [x / 10 for x in range(x_chord_10_percent * 10)] +        x_chord.extend([x for x in range(x_chord_10_percent, self.chord + 1)]) +        print(x_chord) + +        for x in x_chord:              self.x_c.append(get_camber(x)[0])              self.y_c.append(get_camber(x)[1])              self.y_t.append(get_thickness(x)) -            self.dy_c.append(get_dy_c(x)) -            self.theta.append(get_theta(self.dy_c[x])) +            self.dy_c.append(x) +            self.theta.append(get_theta(x))              self.x_u.append(get_upper_coordinates(x)[0])              self.z_u.append(get_upper_coordinates(x)[1])              self.x_l.append(get_lower_coordinates(x)[0]) | 
