📄 airfoil.dem
字号:
## $Id: airfoil.dem,v 1.1.1.1.2.2 2001/12/04 14:12:53 lhecking Exp $## This demo shows how to use bezier splines to define NACA four# series airfoils and complex variables to define Joukowski# Airfoils. It will be expanded after overplotting in implemented# to plot Coefficient of Pressure as well.# Alex Woo, Dec. 1992## The definitions below follows: "Bezier presentation of airfoils",# by Wolfgang Boehm, Computer Aided Geometric Design 4 (1987) pp 17-22.## Gershon Elber, Nov. 1992## m = percent camber# p = percent chord with maximum camberpause 0 "NACA four series airfoils by bezier splines"pause 0 "Will add pressure distribution later with Overplotting"mm = 0.6# NACA6xxxthick = 0.09 # nine percent NACAxx09pp = 0.4# NACAx4xx# Combined this implies NACA6409 airfoil## Airfoil thickness function.#set xlabel "NACA6409 -- 9% thick, 40% max camber, 6% camber"x0 = 0.0y0 = 0.0x1 = 0.0y1 = 0.18556x2 = 0.03571y2 = 0.34863x3 = 0.10714y3 = 0.48919x4 = 0.21429 y4 = 0.58214x5 = 0.35714y5 = 0.55724x6 = 0.53571y6 = 0.44992x7 = 0.75000y7 = 0.30281x8 = 1.00000y8 = 0.01050## Directly defining the order 8 Bezier basis function for a faster evaluation.#bez_d4_i0(x) = (1 - x)**4bez_d4_i1(x) = 4 * (1 - x)**3 * xbez_d4_i2(x) = 6 * (1 - x)**2 * x**2bez_d4_i3(x) = 4 * (1 - x)**1 * x**3bez_d4_i4(x) = x**4bez_d8_i0(x) = (1 - x)**8bez_d8_i1(x) = 8 * (1 - x)**7 * xbez_d8_i2(x) = 28 * (1 - x)**6 * x**2bez_d8_i3(x) = 56 * (1 - x)**5 * x**3bez_d8_i4(x) = 70 * (1 - x)**4 * x**4bez_d8_i5(x) = 56 * (1 - x)**3 * x**5bez_d8_i6(x) = 28 * (1 - x)**2 * x**6bez_d8_i7(x) = 8 * (1 - x) * x**7bez_d8_i8(x) = x**8m0 = 0.0m1 = 0.1m2 = 0.1m3 = 0.1m4 = 0.0mean_y(t) = m0 * mm * bez_d4_i0(t) + \ m1 * mm * bez_d4_i1(t) + \ m2 * mm * bez_d4_i2(t) + \ m3 * mm * bez_d4_i3(t) + \ m4 * mm * bez_d4_i4(t)p0 = 0.0p1 = pp / 2p2 = ppp3 = (pp + 1) / 2p4 = 1.0mean_x(t) = p0 * bez_d4_i0(t) + \ p1 * bez_d4_i1(t) + \ p2 * bez_d4_i2(t) + \ p3 * bez_d4_i3(t) + \ p4 * bez_d4_i4(t)z_x(x) = x0 * bez_d8_i0(x) + x1 * bez_d8_i1(x) + x2 * bez_d8_i2(x) + \ x3 * bez_d8_i3(x) + x4 * bez_d8_i4(x) + x5 * bez_d8_i5(x) + \ x6 * bez_d8_i6(x) + x7 * bez_d8_i7(x) + x8 * bez_d8_i8(x)z_y(x, tk) = \ y0 * tk * bez_d8_i0(x) + y1 * tk * bez_d8_i1(x) + y2 * tk * bez_d8_i2(x) + \ y3 * tk * bez_d8_i3(x) + y4 * tk * bez_d8_i4(x) + y5 * tk * bez_d8_i5(x) + \ y6 * tk * bez_d8_i6(x) + y7 * tk * bez_d8_i7(x) + y8 * tk * bez_d8_i8(x)## Given t value between zero and one, the airfoild curve is defined as# # c(t) = mean(t1(t)) +/- z(t2(t)) n(t1(t)),## where n is the unit normal to the mean line. See the above paper for more.## Unfortunately, the parametrization of c(t) is not the same for mean(t1)# and z(t2). The mean line (and its normal) can assume linear function t1 = t,# -1# but the thickness z_y is, in fact, a function of z_x (t). Since it is# not obvious how to compute this inverse function analytically, we instead# replace t in c(t) equation above by z_x(t) to get:# # c(z_x(t)) = mean(z_x(t)) +/- z(t) n(z_x(t)),## and compute and display this instead. Note we also ignore n(t) and assumes# n(t) is constant in the y direction,#airfoil_y1(t, thick) = mean_y(z_x(t)) + z_y(t, thick)airfoil_y2(t, thick) = mean_y(z_x(t)) - z_y(t, thick)airfoil_y(t) = mean_y(z_x(t))airfoil_x(t) = mean_x(z_x(t))set nogridset nozeroaxisset parametricset xrange [-0.1:1.1]set yrange [-0.1:.7]set trange [ 0.0:1.0]set title "NACA6409 Airfoil"plot airfoil_x(t), airfoil_y(t) title "mean line" w l 2, \ airfoil_x(t), airfoil_y1(t, thick) title "upper surface" w l 1, \ airfoil_x(t), airfoil_y2(t, thick) title "lower surface" w l 1pause -1 "Press Return"mm = 0.0pp = .5thick = .12set title "NACA0012 Airfoil"set xlabel "12% thick, no camber -- classical test case"plot airfoil_x(t), airfoil_y(t) title "mean line" w l 2, \ airfoil_x(t), airfoil_y1(t, thick) title "upper surface" w l 1, \ airfoil_x(t), airfoil_y2(t, thick) title "lower surface" w l 1pause -1 "Press Return"set title ""set xlab ""set key boxset parametricset samples 100set isosamples 10set data style linesset function style linespause 0 "Joukowski Airfoil using Complex Variables" set title "Joukowski Airfoil using Complex Variables" 0,0set timeset yrange [-.2 : 1.8]set trange [0: 2*pi]set xrange [-.6:.6]zeta(t) = -eps + (a+eps)*exp(t*{0,1})eta(t) = zeta(t) + a*a/zeta(t)eps = 0.06a =.250set xlabel "eps = 0.06 real"plot real(eta(t)),imag(eta(t))pause -1 "Press Return"eps = 0.06*{1,-1}set xlabel "eps = 0.06 + i0.06"plot real(eta(t)),imag(eta(t))pause -1 "Press Return"reset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -