function [P, VBu, VBv, VN, TM, TC] = elex_shoe(k,l),
% ELEX_SHOE -  CALCULA OS ELEMENTOS EXATOS DA GEOMETRIA DIFERENCIAL
%              DE UM PAR (k,l) DA SUPERFICIE GERADA PELA FUNCAO SHOE
%   [P, VBu, VBv, VN, TM, TC] = elex_shoe(u,v), na qual:
%   P correspondem ao ponto tridimensional associado ao par (k,l)
%   VBu e VBv correspondem os vetores de base nas direcoes u e v, respectivamente, 
%   VN corresponde ao vetor normal,
%   TM corresponde aos coeficientes da primeira forma fundamental (tensor metrico), e
%   TC corresponde aos coeficientes da segunda forma fundamental (tensor curvatura).

% Definicao da funcao Shoe
syms u v;

f = u;

g = v;

h = ((1/3) * (u^3)) - ((1/2) * (v^2));

shoe = [ f g h ];

% Calculo de suas derivadas de primeira e segunda ordem
d_u = [ diff(shoe,u) ];
d_v = [ diff(shoe,v) ];

dd_uu = [ diff(d_u,u) ];
dd_uv = [ diff(d_u,v) ];
dd_vu = [ diff(d_v,u) ];
dd_vv = [ diff(d_v,v) ];

% Calculo do Ponto Tridimensional P correspondem ao par (k,l)
u = k;
v = l;

P = [ eval(shoe) ];

% Calculo dos Vetores de Base VBu e VBv
VBu = [ eval(d_u) ];
VBv = [ eval(d_v) ];

% Calculo do Vetor Normal VN
normal = cross(VBu, VBv);
VN = normal./norm(normal);

% Calculo do Tensor Metrico TM
TM = [dot(VBu, VBu) dot(VBu, VBv) dot(VBv, VBu) dot(VBv, VBv) ];

% Calculo do Tensor Curvatura TC
TC = [dot(VN, eval(dd_uu)) dot(VN, eval(dd_uv)) dot(VN, eval(dd_vu)) dot(VN, eval(dd_vv)) ];
