NACA 4 位翼型
NACA 4 digit airfoil
我有一个包含机翼 X 和 Y 坐标的 NACA csv 文件。
我想做的是,从角度 theta 给出一个圆以获得坐标 X。从那个 X,从 NACA profil 获得 Y 坐标。
为了我的问题的需要,我想把profil分成两部分:extrados和intrados:
_ extrados:y 值为正的配置文件
_ intrados:y 值为负的配置文件
现在,我有这个:
def profil(r,theta):
X = r*np.cos(theta)
Y = r*np.sin(theta)
with open('naca_2414.csv','r') as f:
data = list(reader(f, delimiter=','))
x = [i[0] for i in data]
y = [i[1] for i in data]
if (Y>0):
val = np.interp(X,x,y)
else:
val = -np.interp(X,x,y)
return val
我知道这是错误的,我对用于实现插值的值感到困惑和混淆,看不出该怎么做,尤其是实现“上”和“下”的插值" 机翼表面。
你能帮忙吗?
谢谢
嗯,我不能说我已经完全理解了“圆圈”部分。但是当你要求将配置文件分成上下两部分然后进行插值时,这段代码可以帮助你。
import numpy as np
# Read naca into a numpy array
# I've used a string here, but you can find resources how to read your csv.
naca = "1.00000,0.00147|0.99739,0.00210|0.98929,0.00396|0.97587,0.00700|0.95729,0.01112|0.93372,0.01620|0.90542,0.02207|0.87267,0.02857|0.83582,0.03552|0.79527,0.04274|0.75143,0.05004|0.70480,0.05723|0.65586,0.06412|0.60515,0.07053|0.55324,0.07629|0.50069,0.08120|0.44808,0.08512|0.39598,0.08787|0.34454,0.08913|0.29482,0.08866|0.24740,0.08645|0.20285,0.08255|0.16169,0.07707|0.12440,0.07014|0.09141,0.06198|0.06310,0.05281|0.03977,0.04289|0.02165,0.03245|0.00892,0.02171|0.00169,0.01085|0.00000,0.00000|0.00379,-0.01031|0.01293,-0.01956|0.02730,-0.02770|0.04669,-0.03471|0.07087,-0.04054|0.09957,-0.04516|0.13246,-0.04858|0.16918,-0.05082|0.20937,-0.05195|0.25260,-0.05208|0.29844,-0.05133|0.34644,-0.04987|0.39611,-0.04787|0.44739,-0.04537|0.49931,-0.04232|0.55129,-0.03886|0.60276,-0.03516|0.65316,-0.03132|0.70194,-0.02745|0.74857,-0.02365|0.79252,-0.01998|0.83331,-0.01650|0.87048,-0.01328|0.90360,-0.01035|0.93230,-0.00776|0.95626,-0.00557|0.97518,-0.00381|0.98886,-0.00252|0.99713,-0.00173|1.00000,-0.00147"
naca = np.genfromtxt(naca.split('|'), delimiter=',')
print(naca.shape)
# Split naca into upper and lower parts. We're using '<=' here
# instead of '<' to make interp work
extrados = naca[naca[:, 1] >= 0]
intrados = naca[naca[:, 1] <= 0]
# Sort arrays along column 0, for np.interp to work
intrados = intrados[np.argsort(intrados[:, 0])]
extrados = extrados[np.argsort(extrados[:, 0])]
# Now you can use np.interp as you'd like.
# For example:
print(np.interp(0.98929, intrados[:, 0], intrados[:, 1]))
# -0.0024789238210398993
print(np.interp(0.98929, extrados[:, 0], extrados[:, 1]))
# 0.00396
我有一个包含机翼 X 和 Y 坐标的 NACA csv 文件。
我想做的是,从角度 theta 给出一个圆以获得坐标 X。从那个 X,从 NACA profil 获得 Y 坐标。
为了我的问题的需要,我想把profil分成两部分:extrados和intrados: _ extrados:y 值为正的配置文件 _ intrados:y 值为负的配置文件
现在,我有这个:
def profil(r,theta):
X = r*np.cos(theta)
Y = r*np.sin(theta)
with open('naca_2414.csv','r') as f:
data = list(reader(f, delimiter=','))
x = [i[0] for i in data]
y = [i[1] for i in data]
if (Y>0):
val = np.interp(X,x,y)
else:
val = -np.interp(X,x,y)
return val
我知道这是错误的,我对用于实现插值的值感到困惑和混淆,看不出该怎么做,尤其是实现“上”和“下”的插值" 机翼表面。
你能帮忙吗?
谢谢
嗯,我不能说我已经完全理解了“圆圈”部分。但是当你要求将配置文件分成上下两部分然后进行插值时,这段代码可以帮助你。
import numpy as np
# Read naca into a numpy array
# I've used a string here, but you can find resources how to read your csv.
naca = "1.00000,0.00147|0.99739,0.00210|0.98929,0.00396|0.97587,0.00700|0.95729,0.01112|0.93372,0.01620|0.90542,0.02207|0.87267,0.02857|0.83582,0.03552|0.79527,0.04274|0.75143,0.05004|0.70480,0.05723|0.65586,0.06412|0.60515,0.07053|0.55324,0.07629|0.50069,0.08120|0.44808,0.08512|0.39598,0.08787|0.34454,0.08913|0.29482,0.08866|0.24740,0.08645|0.20285,0.08255|0.16169,0.07707|0.12440,0.07014|0.09141,0.06198|0.06310,0.05281|0.03977,0.04289|0.02165,0.03245|0.00892,0.02171|0.00169,0.01085|0.00000,0.00000|0.00379,-0.01031|0.01293,-0.01956|0.02730,-0.02770|0.04669,-0.03471|0.07087,-0.04054|0.09957,-0.04516|0.13246,-0.04858|0.16918,-0.05082|0.20937,-0.05195|0.25260,-0.05208|0.29844,-0.05133|0.34644,-0.04987|0.39611,-0.04787|0.44739,-0.04537|0.49931,-0.04232|0.55129,-0.03886|0.60276,-0.03516|0.65316,-0.03132|0.70194,-0.02745|0.74857,-0.02365|0.79252,-0.01998|0.83331,-0.01650|0.87048,-0.01328|0.90360,-0.01035|0.93230,-0.00776|0.95626,-0.00557|0.97518,-0.00381|0.98886,-0.00252|0.99713,-0.00173|1.00000,-0.00147"
naca = np.genfromtxt(naca.split('|'), delimiter=',')
print(naca.shape)
# Split naca into upper and lower parts. We're using '<=' here
# instead of '<' to make interp work
extrados = naca[naca[:, 1] >= 0]
intrados = naca[naca[:, 1] <= 0]
# Sort arrays along column 0, for np.interp to work
intrados = intrados[np.argsort(intrados[:, 0])]
extrados = extrados[np.argsort(extrados[:, 0])]
# Now you can use np.interp as you'd like.
# For example:
print(np.interp(0.98929, intrados[:, 0], intrados[:, 1]))
# -0.0024789238210398993
print(np.interp(0.98929, extrados[:, 0], extrados[:, 1]))
# 0.00396