function [x, v, a] = traject(xi, xf, t, f)

%TRAJECT calcula uma trajectória rectilinea com aceleração variavel
%   [x, v, a] = traject(xi, xf, t, f), devolve o vector posição, 
%   velocidade e aceleração com o trajecto definido de acordo com
%   os parametros passados na função.
%   PARAMETROS PRÉ-DEFINIDOS:
%       ai = 0, af = 0;
%       vi = 0, vf = 0;
%   ------------------------
%   PARAMETROS DA FUNÇÃO:
%       xi é a posição inicial
%       xf é a posição final
%       t é o tempo de execução do movimento
%       f é o número valores por segundo
%   ------------------------
%   PARAMETROS DE SAIDA:
%       x é o vector posição
%       v é o vector velocidade
%       a é o vector aceleração


coef = [t^3     t^2     t
        t^4/4   t^3/3   t^2/2
        t^5/20  t^4/12  t^3/6];     % matriz dos coeficientes

resul = [0; 0; xf-xi];              % vector dos resultados para tfinal


% Método de Cramer

coef1 = coef;                       %
coef1(:,1) = resul;                 %
a1 = det(coef1)/det(coef);          %% cálculo do coeficiente de 3ª ordem

coef1 = coef;                       %
coef1(:,2) = resul;                 %
a2 = det(coef1)/det(coef);          % cálculo do coeficiente de 2ª ordem

coef1 = coef;                       %
coef1(:,3) = resul;                 %
a3 = det(coef1)/det(coef);          % cálculo do coeficiente de 1ª ordem


a = 0;      % aceleração inicial
v = 0;      % velocidade inicial
x = xi;     % posição inicial

r = linspace(0,t,t*f);     % gera um vector tempo com f valores por segundo


% Cálculo do vector aceleração
a = a1.*r.^3+a2.*r.^2+a3.*r;


% Cálculo do vector velocidade
v = a1.*r.^4./4 + a2.*r.^3./3 + a3.*r.^2./2; 


% Cálculo do vector posição
x = xi*ones(1, t*f) + a1.*r.^5./20 + a2.*r.^4./12 + a3.*r.^3./6;

                                                          

        
        