Você está na página 1de 3

Cálculo numérico dos splines cúbicos

O cálculo numérico dos splines cúbicos pode ser efectuado com recurso quase
directo às equações apresentadas anteriormente.

Apresenta-se a descrição de um algoritmo destinado ao cálculo numérico de uma


trajectória a partir do conjunto de todos os pontos prescritos, dadas as direcções inicial e
final da trajectória. São apresentados fragmentos de programa, escritos em MATLAB.

O programa pode ser dividido em três partes:

a) Preparação das matrizes e vectores necessários ao cálculo dos coeficientes da


equação (1);

b) Cálculo dos coeficientes de (1);

c) Cálculo da trajectória Sk(t).

Dadas as coordenadas dos pontos (p1, p2, …, pn) da trajectória, as direcções inicial e
final e um intervalo de tempo t entre os pontos prescritos da trajectória e sendo n o
número de pontos prescritos, pode aplicar-se o seguinte algoritmo:

1º - Construção de um vector de intervalos de tempo

Sendo os tempos tk representados por t(k), t por dt e o número de pontos prescritos


dado pelo operador length(x), constroi-se um vector de intervalos de tempo:

t(1)=0;
for k=1:length(x)-1
t(k+1)=t(k)+dt(k);
end

2º - Projecção das direcções inicial e final nas coordenadas x, y:

As direcções inicial e final da trajectória são projectadas nos eixos:

fi0=Fi0*pi/180; %Conversão de graus para radianos


vx=cos(fi0);
vy=sin(fi0);

fin=Fin*pi/180; %Conversão de graus para radianos


vxn=cos(fin);
vyn=sin(fin);

Fi0 e Fin são, respectivamente, as direcções inicial e final da trajectória, expressas em


graus.

1
3º - Geração de um sistema de equações:

O sistema de equações, necessário para a obtenção dos coeficientes de (1), é obtido


na forma matricial. Assim, em função das restrições apresentadas na secção 3.1, é gerado
um sistema de equações na forma Ax+B=0. A matriz A assim como o vector B são,
inicialmente, apenas preenchidos com zeros mas com a dimensão adequada. Deste modo,
será necessário preencher apenas os valores não nulos da matriz e do vector.

m=4*(n-1); % m é a ordem da matriz


A=zeros(m); % gera uma matriz mxm de zeros
B=zeros(m,1); % gera um vector mx1 de zeros

4º - Construção da matriz A:

O algoritmo utilizado na construção da matriz A foi criado de forma a poder


produzir esta matriz para qualquer número de pontos prescritos. Da análise das condições
(6) a (13) e das equações (22) a (37) pode escrever-se o fragmento de programa:

A(1,1:4)=[1 t(1) (t(1))^2 (t(1))^3]; % 1ª linha.


A(2,1:4)=[0 1 2*(t(1)) 3*(t(1))^2]; % 2ª linha.
A(m-1,m-3:m)=[1 t(n) (t(n))^2 (t(n))^3]; % Penúltima linha.
A(m,m-3:m)=[0 1 2*(t(n)) 3*(t(n))^3]; % Última linha.

for k=3:n %Linhas de 3 a n e colunas de 5 a 4*(n-2)+4.


A(k,4*(k-2)+1:4*(k-2)+4)=[1 t(k-1) (t(k-1))^2 (t(k-1))^3];
end

k=n+1; % Linhas de n+1 a 2n-2 e colunas de 1 a 4n-4.


for j=1:n-2
A(k+j-1,4*j-3:4*j+4)=[1 t(j+1) (t(j+1))^2 (t(j+1))^3-1-t(j+1)
-(t(j+1))^2 -(t(j+1))^3];
end

k=2*n-1; % Linhas de 2n-1 a 3n-4 e colunas de 1 a 4n-4.


for j=1:n-2
A(k+j-1,4*j-3:4*j+4)=[0 1 2*(t(j+1)) 3*(t(j+1))^2 0 -1
-2*(t(j+1)) -3*(t(j+1))^2];
end

k=3*n-3; %linhas de 3n-3 a 4n-6 e colunas de 1 a 4n-4


for j=1:n-2
A(k+j-1,4*j-3:4*j+4)=[0 0 2 6*(t(j+1)) 0 0 -2 -6*(t(j+1))];
end

5º - Construção do vector B para coordenada dos x:

O fragmento de programa utilizado na construção do vector B é o seguinte:

2
B(1:2,1)=[x(1); vx]; % 1ª e 2ª linhas, x(1) coordenada do
primeiro ponto e vx velocidade inicial.
for k=2:n-1 %Linhas de 3 a n-1.
B(k+1,1)=x(k);
end

B(m-1:m,1)=[x(n); vxn]; % Penúltima e última linhas, x(n)


coordenada do último ponto e vxn velocidade final.

6º - Construção de um vector Qx para coordenada dos x:

O vector Qx contêm os coeficientes das equações cúbicas para o eixo dos x: a1k, b1k,
c1k, d1k de acordo com (1).

Cálculo dos coeficientes das equações cúbicas para X


Qx=(A^(-1))*B;

for k=1:n-1 %linhas de 1 a n-1


ax(k)=Qx(4*k-3); bx(k)=Qx(4*k-2); cx(k)=Qx(4*k-1);
dx(k)=Qx(4*k); %atribuição dos coeficientes para cada equação
end

7º - Construção do vector B e vector Qy para coordenada dos y:

A construção é idêntica à utilizada nos pontos 5º e 6º, calculando-se a1k, b2k, c2k, d2k
para o eixo dos y, de acordo com (1).

8º - Construção do spline de todo o percurso:

Calculados os coeficientes da equação (1), o spline é construído pelo fragmento de


programa:

j=0;
for k=1:n-1 %Linhas de 1 a n-1.
for TT=t(k):dt(k)/(p+1):t(k+1)-dt(k)/(p+1), % p - número
de pontos entre dois pontos do conjunto inicial
j=j+1;
X(j)=ax(k)+bx(k)*TT+cx(k)*TT^2+dx(k)*TT^3;
Y(j)=ay(k)+by(k)*TT+cy(k)*TT^2+dy(k)*TT^3;
end
end
j=j+1; %Atribuição do último ponto.
X(j)=x(n);
Y(j)=y(n);

Você também pode gostar