// Valores do parâmetro para os valores da coordenada x tx=[0.0 1.1 2.0 2.5 3.6 5.0 5.3]; tmin = min(tx); tmax = max(tx); // Valores de x correspondentes (os tamanhos dos vetores tx e x devem ser idênticos) // O primeiro e o último valores devem ser iguais x=[-3.1 -2 -1 1.0 2 3 -3.1]; // Valores do parâmetro para os valores da coordenada y // Atenção: o primeiro e o último devem ser iguais a tmin e tmax ty=[0.0 0.5 0.9 1.7 2.6 3.2 4.5 5.3]; // Valores de y correspondentes (os tamanhos dos vetores ty e y devem ser idênticos) // O primeiro e o último valores devem ser iguais y=[2.0 4.0 -1.0 0.0 1.0 2.0 1.0 2.0]; // Valores do parâmetro para os valores da coordenada z // Atenção: o primeiro e o último devem ser iguais a tmin e tmax tz=[0.0 0.5 0.9 1.7 2.6 3.2 4.0 4.5 5.3]; // Valores de z correspondentes (os tamanhos dos vetores tz e z devem ser idênticos) // O primeiro e o último valores devem ser iguais z=[0.0 1.0 3.0 2.0 1.0 0.0 -2.0 -1.0 0.0]; //OBS: os vetores tx, ty e tz não precisam ser iguais nem terem o mesmo tamanho, // mas no nosso problema eles deveriam começar e terminar nos mesmos valores // CRIANDO A FUNÇÃO SPLINE // t é o vetor sobre o qual vamos calcular o valor da função spline; o resultado será o conjunto de valores s, // que sera um vetor do mesmo tamanho que t // ts é o vetor de parametros (tx, ty ou tz), e coords é o vetor de valores (x,y ou z) function s=Spline_Cubico(ttt,ts,coords) // "splin" acha as derivadas nos nós para os dados. Aqui, a condição de contorno é periódica dx = splin(ts,coords,"periodic"); // "interp" faz a interpolaçao de Hermite com os pontos, valores e derivadas dados, calculando os valores sobre o vetor ttt s=interp(ttt,ts,coords,dx) endfunction // Este é o vetor de valores de "t" que será exportado para usar no Blender // Os dois primeiros números do argumento devem ser os extremos esquerdo e direito do parâmetro t - isto é, o primeiro e o último valores dos vetores tx, ty e tz // "linspace" então cria n pontos (incluindo os extremos) com espaçamento regular, entre os dois pontos dados n=150; tt=linspace(tmin,tmax,n); // Valores dos 3 splines sobre o vetor tt. Agora tt, xx, yy, zz têm todos o mesmo tamanho n xx=Spline_Cubico(tt,tx,x); yy=Spline_Cubico(tt,ty,y); zz=Spline_Cubico(tt,tz,z); xx0=xx(1:n-1); xx1=xx(2:n); yy0=yy(1:n-1); yy1=yy(2:n); zz0=zz(1:n-1); zz1=zz(2:n); dist=(xx1-xx0).^2+(yy1-yy0).^2+(zz1-zz0).^2; dist=sqrt(dist); comprimento=sum(dist); XXlinha=xx'*ones(xx); XXcoluna=ones(xx)'*xx; YYlinha=yy'*ones(yy); YYcoluna=ones(yy)'*yy; ZZlinha=zz'*ones(zz); ZZcoluna=ones(zz)'*zz; matriz_de_distancias=(XXlinha-XXcoluna).^2+(YYlinha-YYcoluna).^2+(ZZlinha-ZZcoluna).^2; matriz_de_distancias=sqrt(matriz_de_distancias); diametro=max(matriz_de_distancias); plot2d(tx,x,style=-2); plot2d(ty,y,style=-3);plot2d(tz,z,style=-4); plot2d(tt,xx,style=1); plot2d(tt,yy,style=2);plot2d(tt,zz,style=3); M=[tt;xx;yy;zz]; csvWrite(M,'/home/blender/Downloads/splines.txt');