|
1 | 1 | from abc import ABC, abstractmethod |
2 | 2 | import warnings |
3 | 3 |
|
4 | | -import matplotlib.pyplot as plt |
5 | 4 | import numpy as np |
6 | 5 | from scipy.optimize import fsolve |
7 | 6 |
|
|
20 | 19 | _TrapezoidalFinsPrints, |
21 | 20 | ) |
22 | 21 |
|
| 22 | +# TODO: all the evaluate_shape() methods need tests and documentation |
23 | 23 |
|
24 | 24 | class AeroSurface(ABC): |
25 | 25 | """Abstract class used to define aerodynamic surfaces.""" |
@@ -1215,6 +1215,30 @@ def evaluate_geometrical_parameters(self): |
1215 | 1215 | self.roll_damping_interference_factor = roll_damping_interference_factor |
1216 | 1216 | self.roll_forcing_interference_factor = roll_forcing_interference_factor |
1217 | 1217 |
|
| 1218 | + self.evaluate_shape() |
| 1219 | + return None |
| 1220 | + |
| 1221 | + def evaluate_shape(self): |
| 1222 | + if self.sweep_length: |
| 1223 | + points = [ |
| 1224 | + (0, 0), |
| 1225 | + (self.sweep_length, self.span), |
| 1226 | + (self.sweep_length + self.tip_chord, self.span), |
| 1227 | + (self.root_chord, 0), |
| 1228 | + ] |
| 1229 | + else: |
| 1230 | + points = [ |
| 1231 | + (0, 0), |
| 1232 | + (self.root_chord - self.tip_chord, self.span), |
| 1233 | + (self.root_chord, self.span), |
| 1234 | + (self.root_chord, 0), |
| 1235 | + ] |
| 1236 | + |
| 1237 | + x_array, y_array = zip(*points) |
| 1238 | + self.shape_vec = [np.array(x_array), np.array(y_array)] |
| 1239 | + |
| 1240 | + return None |
| 1241 | + |
1218 | 1242 | def info(self): |
1219 | 1243 | self.prints.geometry() |
1220 | 1244 | self.prints.lift() |
@@ -1521,6 +1545,16 @@ def evaluate_geometrical_parameters(self): |
1521 | 1545 | self.roll_damping_interference_factor = roll_damping_interference_factor |
1522 | 1546 | self.roll_forcing_interference_factor = roll_forcing_interference_factor |
1523 | 1547 |
|
| 1548 | + self.evaluate_shape() |
| 1549 | + return None |
| 1550 | + |
| 1551 | + def evaluate_shape(self): |
| 1552 | + angles = np.arange(0, 360, 5) |
| 1553 | + x_array = self.root_chord / 2 + self.root_chord / 2 * np.cos(np.radians(angles)) |
| 1554 | + y_array = self.span * np.sin(np.radians(angles)) |
| 1555 | + self.shape_vec = [x_array, y_array] |
| 1556 | + return None |
| 1557 | + |
1524 | 1558 | def info(self): |
1525 | 1559 | self.prints.geometry() |
1526 | 1560 | self.prints.lift() |
@@ -1675,6 +1709,16 @@ def evaluate_geometrical_parameters(self): |
1675 | 1709 | self.surface_area = ( |
1676 | 1710 | np.pi * self.slant_length * (self.top_radius + self.bottom_radius) |
1677 | 1711 | ) |
| 1712 | + self.evaluate_shape() |
| 1713 | + return None |
| 1714 | + |
| 1715 | + def evaluate_shape(self): |
| 1716 | + # Assuming the tail is a cone, calculate the shape vector |
| 1717 | + self.shape_vec = [ |
| 1718 | + np.array([0, self.length]), |
| 1719 | + np.array([self.top_radius, self.bottom_radius]), |
| 1720 | + ] |
| 1721 | + return None |
1678 | 1722 |
|
1679 | 1723 | def evaluate_lift_coefficient(self): |
1680 | 1724 | """Calculates and returns tail's lift coefficient. |
|
0 commit comments