clear all
close all
clc
%% DADOS
m = 2;          % módulo
N = 23;         % número de dentes
Ap = 20*pi/180; % ângulo de pressão
NP = 50;        % número de pontos sobre a curva
%% CÁLCULOS
Rp = m*N/2;         % raio primitivo
Rb = Rp * cos(Ap);  % raio de base
Tp = 2*pi*Rp/N/2;   % espessura circular primitiva
Rf = Rp - 1.2*m;    % raio de pé do dente
Ra = Rp + m;        % raio de cabeça do dente
for i = 1:NP        % cálculo dos pontos da curva
    R(i) = (i-1)/(NP-1)*(Ra-Rb)+Rb;     % raio
    Af = acos(Rb/R(i));                 % ângulo de flanco Af
    evAf = tan(Af)-Af;                  % função evolvente de Af
    Afp = acos(Rb/Rp);                  % ângulo de flanco primitivo Afp
    evAfp = tan(Afp)-Afp;               % função evolvente de Afp
    T(i) = 2*R(i)*(Tp/(2*Rp)+evAfp-evAf);   % espessura circular em R
    alfa = (T(i)/2)/R(i);               % transformação para coordenadas 
    Xe(i) = -R(i)*sin(alfa);            % cartesianas
    Xd(i) = -Xe(i);
    Y(i) = R(i)*cos(alfa);    
end
%% gráfico
figure(1)
plot(Xe,Y,'r',Xd,Y,'g','LineWidth',2)             % perfil evolvental
grid on
axis equal
Ymax = max(Y)*1.1;
Ymin = min(Y)*0.9;
ylim([Ymin Ymax]) 
hold on
for j = 1:100
    teta = (j-1)/99*2*pi;
    xb(j) = Rb*sin(teta);   % coordenadas da circunferência de base
    yb(j) = Rb*cos(teta);
    xf(j) = Rf*sin(teta);   % coordenadas da circunferência de pé
    yf(j) = Rf*cos(teta);
    xa(j) = Ra*sin(teta);   % coordenadas da circunferência de cabeça
    ya(j) = Ra*cos(teta);
end
plot(xb,yb,'--b',xf,yf,'m',xa,ya,'--c','LineWidth',1) % plotagem das três circunferências
legend('face esq.','face dir.','circ. base','circ. pé','circ. cabeça')
%ylim([-130 inf])