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 de points suivant :
- Code: Tout sélectionner
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
Fichier de points :
35 47 1
34.486 46.837 1.5204
33.857 46.68 2.1674
33.125 46.525 2.9271
32.302 46.368 3.7857
31.4 46.206 4.7291
30.431 46.035 5.7434
29.407 45.852 6.8148
28.34 45.653 7.9293
27.242 45.434 9.0729
26.125 45.193 10.232
25 44.925 11.392
23.88 44.627 12.539
22.778 44.295 13.66
21.704 43.926 14.741
20.671 43.516 15.767
19.69 43.062 16.724
18.775 42.56 17.6
17.936 42.006 18.379
17.186 41.397 19.048
16.537 40.73 19.593
16 40 20
Un grand merci d'avance,
Cordialement.
