Bonjour,
j'espère que je vais être clair dans l'exposition de mon problème et que vous allez prendre le temps de me lire, car j'ai besoin d'aide d'experts comme vous.
J'ai une série de points en 3D, formant une courbe. Ces points sont séparés d'environ 1 (mètre par exemple, valeurs variables). Je souhaiterais avoir au final un fichier de points distants de 5 (mètres). Cette dernière valeur est alors calculée en faisant la somme des distances partielles (distance entre chaque point). Ainsi pour avoir la valeur 5 exactement, il faudra donc créer des interpolations. C'est-à-dire, lorsque cette valeur se trouve entre deux points connus, on interpolera linéairement pour avoir les coordonnées du point recherché. Ce dernier sera alors par la suite intégré à la liste de points pour calculer les distances partielles
J'arrive à programmer ceci mais pour créer un seul point, je ne vois pas comment faire une boucle qui se répèterait jusqu'à la fin de la liste original.
Je pense que vous comprendrez mieux en exécutant le code suivant avec le fichier *.txt joint à ce message :
Un grand merci d'avance,Code:function[]=interpolation(txt) M=dlmread(txt); Final = [M(1,1) M(1,2) M(1,3)]; for i=1:length(M)-1 D(i,1)=sqrt((M(i,1)-M(i+1,1))^2+(M(i,2)-M(i+1,2))^2+(M(i,3)-M(i+1,3))^2); end for j=1:length(D) Dpro(j,1)=D(j,1); Dcumul(j,1)=sum(Dpro); end for k=1:length(Dcumul) if Dcumul(k,1)>5 && Dcumul(k-1,1)<5 Dtot=Dcumul(k,1)-Dcumul(k-1,1); Dint=5-Dcumul(k-1,1); Final(k,1)= M(k,1)+(M(k+1,1)-M(k,1))*Dint/Dtot; Final(k,2)= M(k,2)+(M(k+1,2)-M(k,2))*Dint/Dtot; Final(k,3)= M(k,3)+(M(k+1,3)-M(k,3))*Dint/Dtot; M(k+1,1)=Final(k,1); M(k+1,2)=Final(k,2); M(k+1,3)=Final(k,3); end end %on supprime les 0 ligneasupprimer = []; for l=1:length(Final) if (Final(l,1)==0) & (Final(l,2)==0) & (Final(l,3)==0) ligneasupprimer = [ligneasupprimer l]; end end Final(ligneasupprimer,:) = []; Final
Cordialement.
-----