Standardizing Airfoil Coordinates
Develop an airfoil plotter for all types of airfoil coordinates.
We'll cover the following...
Now, you can graph some NACA airfoils by name. But, there are many more airfoils in the UIUC database than just NACA ones. Let’s try graphing an MH70 airfoil:
Press + to interact
import requestsimport matplotlib.pyplot as pltdef plot_airfoil(x_coordinates: list, y_coordinates: list, plot_title: str) -> None:"""Plot the airfoil coordinates given the list of coordinates:param x_coordinates: list of airfoil's x coordinates:param y_coordinates: list of airfoil's y coordinates:param plot_title: str to title as the plot's title:return: None"""plt.plot(x_coordinates, y_coordinates, 'k-')plt.title('{} airfoil'.format(plot_title))plt.style.use('default')plt.xlim(-0.50, 1.25)plt.ylim(-1, 1)#plt.show()plt.savefig("output/chap4_4.png")def get_airfoil_coords(airfoil: str) -> tuple:"""Get airfoil coords from UIUC websitehttps://m-selig.ae.illinois.edu/ads/coord/__.dat:param airfoil: str of airfoil types:return: tuple of ([x coords], [y coords], plot_title)"""url = 'https://m-selig.ae.illinois.edu/ads/coord/{}.dat'.format(airfoil.lower())response_text = requests.get(url).textall_text = response_text.split('\n')x_coordinates, y_coordinates = [], []plot_title = ''for index, line in enumerate(all_text):if index == 0:plot_title = line.strip()else:try:line = line.strip()x, y = line.split(' ')x_coordinates.append(float(x.strip()))y_coordinates.append(float(y.strip()))except ValueError:continuereturn x_coordinates, y_coordinates, plot_titleair_foil = 'mh70'x_values, y_values, title = get_airfoil_coords(air_foil)plot_airfoil(x_values, y_values, title)
It’s blank. Let’s look at the .dat
file to see why:
MH 70 11.08%
1.00000000 0.00000000
0.99663874
...