100% found this document useful (1 vote)
800 views17 pages

DTMB Propeller Geometry

This MATLAB code defines the geometry of five DTMB propeller types (4119, 4381, 4382, 4383, 4384) for analysis. It imports data on chord length, pitch, thickness, and camber distributions. It allows the user to select a propeller type and define mesh parameters. Based on the inputs, it generates the 3D panel geometry for the blades by interpolating the design data onto the mesh and applying rotations for pitch and skew. Key sections define the imported propeller design data and routines for generating the blade geometry panels.

Uploaded by

Kivanc Ali ANIL
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
800 views17 pages

DTMB Propeller Geometry

This MATLAB code defines the geometry of five DTMB propeller types (4119, 4381, 4382, 4383, 4384) for analysis. It imports data on chord length, pitch, thickness, and camber distributions. It allows the user to select a propeller type and define mesh parameters. Based on the inputs, it generates the 3D panel geometry for the blades by interpolating the design data onto the mesh and applying rotations for pitch and skew. Key sections define the imported propeller design data and routines for generating the blade geometry panels.

Uploaded by

Kivanc Ali ANIL
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

MATLAB Code for DTMB 4119, 4381, 4382, 4383, 4384 Propeller Geometry

Kıvanç Ali ANIL


propDTMB.m
% Kivanc Ali ANIL (2015)
%
% This program uses following functions and subroutines:
% naca66a08.m (function)
%
clear,clc,close all
format compact
%==========================================================================
PSelect = menu('SELECT PROPELLER TYPE',...
'DTMB 4119',...
'DTMB 438X',...
'CANCEL');
if PSelect == 3% CANCEL
clear, close all
return
end
%==========================================================================
def0 = {'3','2','100','100'}; % ********INPUT
if PSelect == 2
def0 = {'5','2','100','100'}; % ********INPUT
dlgTitle = 'DTMB 438X';
def1 = {'4'}; % ********INPUT
prompt = ...
{ 'Enter the DTMB 438 propeller type (1 to 4)'};
data = inputdlg(prompt,dlgTitle,1,def1);
if isempty(data)==1
clear
return
end
XXXX = str2num(char(data(1))); %#ok<ST2NM>
end
%==========================================================================
dlgTitle = 'DTMB PROPELLER';
prompt = ...
{ 'Enter the number of blades',...
'Enter the propeller diameter (m)',...
'Number of chordwise panels - ENTER AN EVEN NUMBER!',...
'Number of spanwise panels!'};
data = inputdlg(prompt,dlgTitle,1,def0);
if isempty(data)==1
clear
return
end
NBLADE = str2num(char(data(1))); %#ok<ST2NM>
D = str2num(char(data(2))); %#ok<ST2NM>
IB = str2num(char(data(3))); %#ok<ST2NM>
JB = str2num(char(data(4))); %#ok<ST2NM>
IB1 = IB+1;
JB1 = JB+1;
% =========================================================================
YSelect = menu('SPAN SPACING OPTIONS',...
'Constant Spacing for Span',...
'Full Cosine Spacing for Span',...
'Half Cosine Spacing for Span',...
'CANCEL');
if YSelect == 4 % CANCEL, IPTAL
clear, close all
return
end
%
if YSelect == 1; % Constant Spacing for Span:
YDATA = zeros(1,JB1);
for J = 1:JB1
YDATA(J) = (J-1)/JB;
end
elseif YSelect == 2; % Full Cosine Spacing for Span:
ytilda = 0:pi/(JB):pi;
YDATA = .5*(1-cos(ytilda));
elseif YSelect == 3; % Half Cosine Spacing for Span:
ytilda = 0:pi/(2*(JB)):pi/2;
YDATA = cos(ytilda);
YDATA = fliplr(YDATA);
end
% =========================================================================
% DTMB 4119 DATA
% r/R c/D P/D t/c f/c
data4119T=[...
0.200 0.3200 1.105 0.20550 0.01429
0.300 0.3625 1.102 0.15530 0.02318
0.400 0.4048 1.098 0.11800 0.02303
0.500 0.4392 1.093 0.09016 0.02182
0.600 0.4610 1.088 0.06960 0.02072
0.700 0.4622 1.084 0.05418 0.02003
0.800 0.4347 1.081 0.04206 0.01967
0.900 0.3613 1.079 0.03321 0.01817
0.950 0.2775 1.077 0.03228 0.01631
1.000 0.1750 1.075 0.03160 0.01175];
% =========================================================================
% DTMB 438X DATA
% r/R c/D rk/D t/c sk [°] P/D f/c
% Prop. 4381 4382 4383 4384 4381 4382 4383 4384 4381 4382 4383 4384
data438T=[...
0.20 0.1740 0.0000 0.2494 0.0000 0.0000 0.0000 0.0000 1.3320 1.4550 1.5660 1.6750 0.0351 0.0430 0.0402 0.0545
0.25 0.2020 0.0000 0.1960 0.0000 2.3280 4.6470 6.9610 1.3380 1.4440 1.5390 1.6290 0.0369 0.0395 0.0408 0.0506
0.30 0.2290 0.0000 0.1563 0.0000 4.6550 9.2930 13.9210 1.3450 1.4330 1.5120 1.5840 0.0368 0.0370 0.0407 0.0479
0.40 0.2750 0.0000 0.1069 0.0000 9.3630 18.8160 28.4260 1.3580 1.4120 1.4590 1.4960 0.0348 0.0344 0.0385 0.0453
0.50 0.3120 0.0000 0.0769 0.0000 13.9480 27.9910 42.1520 1.3360 1.3610 1.3860 1.4060 0.0307 0.0305 0.0342 0.0401
0.60 0.3370 0.0000 0.0567 0.0000 18.3780 36.7700 55.1990 1.2800 1.2850 1.2960 1.3050 0.0245 0.0247 0.0281 0.0334
0.70 0.3470 0.0000 0.0421 0.0000 22.7470 45.4530 68.0980 1.2100 1.2000 1.1980 1.1990 0.0191 0.0199 0.0230 0.0278
0.80 0.3340 0.0000 0.0314 0.0000 27.1450 54.2450 81.2830 1.1370 1.1120 1.0960 1.0860 0.0148 0.0161 0.0189 0.0232
0.90 0.2800 0.0000 0.0239 0.0000 31.5750 63.1020 94.6240 1.0660 1.0270 0.9960 0.9730 0.0123 0.0134 0.0159 0.0193
0.95 0.2100 0.0000 0.0229 0.0000 33.7880 67.5310 101.3000 1.0310 0.9850 0.9450 0.9160 0.0128 0.0140 0.0168 0.0201
1.00 0.0700 0.0000 0.0160 0.0000 36.0000 72.0000 108.0000 0.9950 0.9420 0.8950 0.8590 0.0123 0.0134 0.0159 0.0193];
% =========================================================================
rR = 0.2+(0.9999999999-0.2)*YDATA;
R = D/2;
% =========================================================================
if PSelect == 1
dataprop = data4119T; % (09.03.2015)
data4119(:,1)= rR';
data4119(:,2)= interp1(dataprop(:,1),dataprop(:,2),data4119(:,1),'spline');
data4119(:,3)= interp1(dataprop(:,1),dataprop(:,3),data4119(:,1),'spline');
data4119(:,4)= interp1(dataprop(:,1),dataprop(:,4),data4119(:,1),'spline');
data4119(:,5)= interp1(dataprop(:,1),dataprop(:,5),data4119(:,1),'spline');
r = data4119(:,1)*R;
c = data4119(:,2)*D;
rk = zeros(size(r));
skV = zeros(size(r));
Pangle = atan(data4119(:,3)*D./(2*pi*r));
tau = data4119(:,4); % thickness ratio (t/c)(maximim thickness/chord)
e = data4119(:,5); % maximum camber ratio (f/c) (maximim camber/chord)
elseif PSelect == 2
dataprop = data438T; % (09.03.2015)
data438(:,1) = rR'; % r/R
data438(:,2) = interp1(dataprop(:,1),dataprop(:,2) ,data438(:,1),'spline');% c/D
data438(:,3) = interp1(dataprop(:,1),dataprop(:,3) ,data438(:,1),'spline');% rk/D
data438(:,4) = interp1(dataprop(:,1),dataprop(:,4) ,data438(:,1),'spline');% t/c
data438(:,5) = interp1(dataprop(:,1),dataprop(:,5) ,data438(:,1),'spline');% 4381 sk [°]
data438(:,6) = interp1(dataprop(:,1),dataprop(:,6) ,data438(:,1),'spline');% 4382
data438(:,7) = interp1(dataprop(:,1),dataprop(:,7) ,data438(:,1),'spline');% 4383
data438(:,8) = interp1(dataprop(:,1),dataprop(:,8) ,data438(:,1),'spline');% 4384
data438(:,9) = interp1(dataprop(:,1),dataprop(:,9) ,data438(:,1),'spline');% 4381 P/D
data438(:,10)= interp1(dataprop(:,1),dataprop(:,10),data438(:,1),'spline');% 4382
data438(:,11)= interp1(dataprop(:,1),dataprop(:,11),data438(:,1),'spline');% 4383
data438(:,12)= interp1(dataprop(:,1),dataprop(:,12),data438(:,1),'spline');% 4384
data438(:,13)= interp1(dataprop(:,1),dataprop(:,13),data438(:,1),'spline');% 4381 f/c
data438(:,14)= interp1(dataprop(:,1),dataprop(:,14),data438(:,1),'spline');% 4382
data438(:,15)= interp1(dataprop(:,1),dataprop(:,15),data438(:,1),'spline');% 4383
data438(:,16)= interp1(dataprop(:,1),dataprop(:,16),data438(:,1),'spline');% 4384
r = data438(:,1)*R;
c = data438(:,2)*D;
rk = data438(:,3)*D;
tau = data438(:,4); % thickness ratio (t/c)(maximim thickness/chord)
sk = data438(:,4+XXXX)*pi/180;
skV = r.*sk;
Pangle = atan(data438(:,8+XXXX)*D./(2*pi*r));
e = data438(:,12+XXXX); % maximum camber ratio (f/c) (maximim camber/chord)
end
% =========================================================================
ztilda = 0:2*pi/IB:pi;
XGCO = zeros(IB1,JB1); % (18.12.2014) %%%%%
YGCO = XGCO;
ZGCO = XGCO;
for J = 1:JB1
zgc = (c(J)/2)*(1-cos(ztilda)); % 0 - c
[zgcu, xgcu, zgcl, xgcl] = naca66a08(tau(J),e(J),zgc,c(J));
zgc = [fliplr(zgcl), zgcu(1,2:length(zgcu))];
xgc = [-fliplr(xgcl), -xgcu(1,2:length(xgcu))];
%
zgc = zgc-c(J)/2;
%
%
zgcT = -xgc*sin(Pangle(J))+zgc*cos(Pangle(J)); % PITCH
xgcT = xgc*cos(Pangle(J))+zgc*sin(Pangle(J)); % PITCH
%
zgc = zgcT;
xgc = xgcT;
%
% rk - RAKE IS ZERO
%
zgc = zgc+skV(J); % SKEW
xgc = xgc+skV(J)*tan(Pangle(J)); % SKEW INDUCED RAKE
%
zgcT = r(J)*sin(zgc/(r(J)));
ygcT = r(J)*cos(zgc/(r(J)));
zgc = zgcT;
ygc = ygcT;
%
XGCO(:,J) = xgc'; %*****
YGCO(:,J) = ygc'; %*****
ZGCO(:,J) = zgc'; %*****
end
% =========================================================================
% PANEL CORNERPOINTS
QF(:,:,1) = XGCO;
QF(:,:,2) = YGCO;
QF(:,:,3) = ZGCO;
% =========================================================================
% HUB PANEL:
RHUB = 0.200*R; % HUB RADIUS
XHBN = 0.400*R; % HUB NOSE LENGTH/RADIUS
XHBU = 0.500*R; % UPSTREAM HUB LENGTH/RADIUS ***
XHBD = 0.200*R; % DOWNSTREAM HUB LENGTH/RADIUS
XHBT = 0.200*R; % HUB TAIL LENGTH/RADIUS
NHBN = 80; % NO. OF NOSE PANELS OF HUB
NHBU = 100; % NO. OF UPSTREAM PANELS OF HUB ***
NHBD = 40; % NO. OF DOWNSTREAM PANELS OF HUB
NHBT = 40; % NO. OF TAIL PANELS OF HUB
MHBT = 100; % NO. OF CIRCUMFERENTIAL PANELS OF HUB
% ------------------------------------------------------------------
NHBX = NHBN+NHBU+IB/2+NHBD+NHBT;
% =========================================================================
% Geometry of the HUB
% --- Generate a hub geometry
% -----------------------------------------------------------------------
% Set up the parameters
% -----------------------------------------------------------------------
NHBNU = NHBN+NHBU;
NHBB = IB/2;
NHP = NHBB+1;
NHBNU1 = NHBNU+1;
NHBNUB = NHBNU+NHBB;
NHBNUBD = NHBNUB+NHBD;
MHBTH1 = MHBT/2+1;
XHBLE = -QF(NHP,1,1);
XHBTE = QF(1,1,1);
XHBNU = XHBU+XHBLE;
XHBND = XHBD+XHBTE;
XHBFU = XHBN+XHBNU;
DELK = 2*pi/NBLADE;
QFH = zeros(NHBX+1,MHBT+1,3); % NHBX=NHBN+NHBU+IB/2+NHBD+NHBT;
%-----------------------------------------------------------------------
% Near the blade
%-----------------------------------------------------------------------
THR = zeros(1,IB+1);
for N=1:IB+1
THR(N)=atan2(QF(N,1,3),QF(N,1,2));
end
for N=1:NHBB+1
DX=(QF(NHP-(N-1),1,1)-QF(NHP+(N-1),1,1))/MHBT;
DTH=( DELK-(THR(NHP+(N-1))-THR(NHP-(N-1))) )/MHBT;
for M=1:MHBT+1
QFH(NHBNU1+N-1,M,1)=QF(NHP+(N-1),1,1)+DX*(M-1);
TH=THR(NHP+(N-1))+DTH*(M-1);
QFH(NHBNU1+N-1,M,2)=RHUB*cos(TH);
QFH(NHBNU1+N-1,M,3)=RHUB*sin(TH);
end
end
%-----------------------------------------------------------------------
% Upstream of the blade
%-----------------------------------------------------------------------
DX = XHBU/NHBU;
RoundAngle= DX*(atan2(QF(1,1,3),QF(1,1,2))-...
atan2(QF(NHP,1,3),QF(NHP,1,2)))/(QF(1,1,1)-QF(NHP,1,1));
DTH = DELK/MHBT;
for N=1:NHBU-1
for M=1:MHBT+1
QFH(NHBN+1+N,M,1)=-XHBNU+DX*N;
TH=THR(NHP)+DTH*(M-1)-((NHBU-N)*RoundAngle);
QFH(NHBN+1+N,M,2)=RHUB*cos(TH);
QFH(NHBN+1+N,M,3)=RHUB*sin(TH);
end
end
% -----------------------------------------------------------------------
% Nose of the hub
% -----------------------------------------------------------------------
DX = XHBN/NHBN;
RoundAngle= DX*(atan2(QF(1,1,3),QF(1,1,2))-...
atan2(QF(NHP,1,3),QF(NHP,1,2)))/(QF(1,1,1)-QF(NHP,1,1));
DTH = DELK/MHBT;
for N=1:NHBN+1
X=DX*(N-1);
XXX=X/XHBN;
XHUB= RHUB;
RR=XHUB*16./3.*(.5*XXX-3./8*XXX*XXX+XXX^4/16);
for M=1:MHBT+1
QFH(N,M,1)=-XHBFU+X;
TH=THR(NHP)+DTH*(M-1)-((NHBU+NHBN+1-N)*RoundAngle);
QFH(N,M,2)= RR*cos(TH);
QFH(N,M,3)= RR*sin(TH);
end
end
%-----------------------------------------------------------------------
% Downstream of the blade
%-----------------------------------------------------------------------
DX = XHBD/NHBD;
RoundAngle= DX*(atan2(QF(1,1,3),QF(1,1,2))-...
atan2(QF(NHP,1,3),QF(NHP,1,2)))/(QF(1,1,1)-QF(NHP,1,1));
DTH = DELK/MHBT;
for N=2:NHBD+1
for M=1:MHBT+1
QFH(NHBNUB+N,M,1)=XHBTE+DX*(N-1);
TH=THR(1)+DTH*(M-1)+((N-1)*RoundAngle);
QFH(NHBNUB+N,M,2)=RHUB*cos(TH);
QFH(NHBNUB+N,M,3)=RHUB*sin(TH);
end
end
%-----------------------------------------------------------------------
% Tail of the hub
%-----------------------------------------------------------------------
DX = XHBT/NHBT;
RoundAngle= DX*(atan2(QF(1,1,3),QF(1,1,2))-...
atan2(QF(NHP,1,3),QF(NHP,1,2)))/(QF(1,1,1)-QF(NHP,1,1));
DTH = DELK/MHBT;
for N=1:NHBT;
X=DX*(N);
XXX=(XHBT-X)/XHBT;
XHUB= RHUB;
RR=XHUB*16./3.*(.5*XXX-3./8*XXX*XXX+XXX^4/16);
for M=1:MHBT+1
QFH(NHBNUBD+1+N,M,1)=XHBND+X;
TH=THR(1)+DTH*(M-1)+((NHBD+1+N-1)*RoundAngle);
QFH(NHBNUBD+1+N,M,2)=RR*cos(TH);
QFH(NHBNUBD+1+N,M,3)=RR*sin(TH);
end
end
% =========================================================================
figure(51)
set(gcf,'Position', [245 105 786 567])
% set(gcf,'Position',[52 49 1800 940],'color',[ 0 0 0])
set(gcf,'color',[ 0 0 0])
hold on
surf(QF(1:IB1,:,1),QF(1:IB1,:,2),QF(1:IB1,:,3),...
'FaceColor',[0.212 0.169 0.000],...
'EdgeColor' ,'none',...
'FaceLighting','gouraud');
QFi = QF ; % (18.12.2014)
QFHi = QFH; % (09.03.2015)
QFHs = QFH;
for i = 1:NBLADE-1
QFtemp(:,:,3) = QFi(:,:,2)*sin(2*pi/NBLADE)+QFi(:,:,3)*cos(2*pi/NBLADE);
QFtemp(:,:,2) = QFi(:,:,2)*cos(2*pi/NBLADE)-QFi(:,:,3)*sin(2*pi/NBLADE);
QFi(:,:,3) = QFtemp(:,:,3); % (18.12.2014)
QFi(:,:,2) = QFtemp(:,:,2); % (18.12.2014)
surf(QFi(1:IB1,:,1),QFi(1:IB1,:,2),QFi(1:IB1,:,3),... % (18.12.2014)
'FaceColor',[0.212 0.169 0.000],...
'EdgeColor' ,'none',...
'FaceLighting','gouraud');
QFHtemp(:,:,3) = QFHi(:,:,2)*sin(2*pi/NBLADE)+QFHi(:,:,3)*cos(2*pi/NBLADE);
QFHtemp(:,:,2) = QFHi(:,:,2)*cos(2*pi/NBLADE)-QFHi(:,:,3)*sin(2*pi/NBLADE);
QFHi(:,:,3) = QFHtemp(:,:,3); % (09.03.2015)
QFHi(:,:,2) = QFHtemp(:,:,2); % (09.03.2015)
QFHs = [QFHs, QFHi(:,2:MHBT+1,:)];
end
surf(QFHs(NHBN+NHBU:NHBX+1,:,1),...
QFHs(NHBN+NHBU:NHBX+1,:,2),...
QFHs(NHBN+NHBU:NHBX+1,:,3),... % (09.03.2015)
'FaceColor',[0.212 0.169 0.000],...
'EdgeColor' ,'none',...
'FaceLighting','gouraud');
surf(QFHs(NHBN:NHBN+NHBU,:,1),...
QFHs(NHBN:NHBN+NHBU,:,2),...
QFHs(NHBN:NHBN+NHBU,:,3),... % (09.03.2015)
'FaceColor',[0.247 0.000 0.000],...
'EdgeColor' ,'none',...
'FaceLighting','gouraud');
surf(QFHs(1:NHBN,:,1),...
QFHs(1:NHBN,:,2),...
QFHs(1:NHBN,:,3),... % (09.03.2015)
'FaceColor',[0.151 0.151 0.151],...
'EdgeColor' ,'none',...
'FaceLighting','gouraud');
axis image
axis vis3d off
grid on
xlabel('x')
ylabel('y')
zlabel('z')
view([180 0])
light('Position',[ 10*D 0 0],'Style','infinite');
light('Position',[-10*D 0 0],'Style','infinite');
light('Position',[ 10*D R 0],'Style','infinite');
light('Position',[-10*D R 0],'Style','infinite');
light('Position',[ 10*D -R 0],'Style','infinite');
light('Position',[-10*D -R 0],'Style','infinite');
light('Position',[ 10*D 0 R],'Style','infinite');
light('Position',[-10*D 0 R],'Style','infinite');
light('Position',[ 10*D 0 -R],'Style','infinite');
light('Position',[-10*D 0 -R],'Style','infinite');
light('Position',[ 10*D R R],'Style','infinite');
light('Position',[-10*D R R],'Style','infinite');
light('Position',[ 10*D -R R],'Style','infinite');
light('Position',[-10*D -R R],'Style','infinite');
light('Position',[ 10*D R -R],'Style','infinite');
light('Position',[-10*D R -R],'Style','infinite');
light('Position',[ 10*D -R -R],'Style','infinite');
light('Position',[-10*D -R -R],'Style','infinite');
light('Position',[ 0 -R 0],'Style','infinite');
light('Position',[ 0 R 0],'Style','infinite');
hold off

naca66a08.m
function [XuG, YuG, XlG, YlG, YG] = naca66a08(tauG,eG, xG,cG)
% Kivanc Ali ANIL (02.12.2012)
% Function for Section mean line: NACA a = 0.8
% Section thickness distribution: NACA 66 (modified)

% tauG : thickness ratio (tmax/c)(maximim thickness/chord)


% eG : maximum camber ratio (f/c) (maximim camber/chord)

tmax = tauG*cG; % c = cG
f = eG*cG; % c = cG

% "MINIMUM PRESSURE ENVELOPES FOR MODIFIED NACA-66 SECTIONS WITH NACA


% a=0.8 CAMBER AND BUSHIPS TYPE 1 AND TYPE 2 SECTIONS" BY TERRY BROCKETT
% TABLE 3
% Foil Geometry at Conventional Stations
% NACA 66 (Mod) & a =. 8 Camber
%
% NACA 66 (mod) a=0.8 mean line a=0.8 mean line
% Thickness Ordinate Camber Ordinate Camber Slope
% x/c T/tmax yc/f dyc/f
data66a08 = [ ...
0.0000 0.0000 0.0000 7.6300 % it is actually infinite
0.0050 0.0665 0.0423 7.1490
0.0075 0.0812 0.0595 6.6170
0.0125 0.1044 0.0907 5.9440
0.0250 0.1466 0.1586 5.0230
0.0500 0.2066 0.2712 4.0830
0.0750 0.2525 0.3657 3.5150
0.1000 0.2907 0.4482 3.1000
0.1500 0.3521 0.5869 2.4880
0.2000 0.4000 0.6993 2.0230
0.2500 0.4363 0.7905 1.6350
0.3000 0.4637 0.8635 1.2920
0.3500 0.4832 0.9202 0.9330
0.4000 0.4952 0.9615 0.6780
0.4500 0.5000 0.9881 0.3850
0.5000 0.4962 1.0000 0.0910
0.5500 0.4846 0.9971 -0.2110
0.6000 0.4653 0.9786 -0.5320
0.6500 0.4383 0.9434 -0.8850
0.7000 0.4035 0.8892 -1.2950
0.7500 0.3612 0.8121 -1.8130
0.8000 0.3110 0.7027 -2.7120
0.8500 0.2532 0.5425 -3.5230
0.9000 0.1877 0.3586 -3.7680
0.9500 0.1143 0.1713 -3.6680
0.9750 0.0748 0.0823 -3.4410
1.0000 0.0000 0.0000 -3.0030];%T/tmax is actually 0.0333
% ---------------------------------------------
% thickness distribution
xtemp = data66a08(:,1)*cG; % c = cG
Ttemp = data66a08(:,2)*tmax;
T = 2*interp1(xtemp,Ttemp,xG,'spline');
% ---------------------------------------------
% mean line (camber)
Ytemp = data66a08(:,3)*f;
YG = interp1(xtemp,Ytemp,xG,'spline');
dYtemp = data66a08(:,4)*f;
dY = interp1(xtemp,dYtemp,xG,'spline');
theta = atan(dY);
theta(1) = pi/2; % tan(pi/2) = inf
theta(length(xG))= pi/2;
% ---------------------------------------------
XuG = xG-(T/2).*sin(theta);
YuG = YG+(T/2).*cos(theta);
XlG = xG+(T/2).*sin(theta);
YlG = YG-(T/2).*cos(theta);

You might also like