1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| function [frequency,D,R,T,labels,links,tracks] = tdfReadData3D (filename)
frequency=[]; D=[]; R=[]; T=[]; labels=[]; links=[]; tracks=[];
[fid,tdfBlockEntries] = tdfFileOpen (filename); % open the file
if fid == -1
return
end
tdfData3DBlockId = 5;
blockIdx = 0;
for e = 1 : length (tdfBlockEntries)
if (tdfData3DBlockId == tdfBlockEntries(e).Type) & (0 ~= tdfBlockEntries(e).Format)
blockIdx = e;
break
end
end
if blockIdx == 0
disp ('Data 3D not found in the file specified.')
tdfFileClose (fid);
return
end
if (-1 == fseek (fid,tdfBlockEntries(blockIdx).Offset,'bof'))
disp ('Error: the file specified is corrupted.')
tdfFileClose (fid);
return
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% read header information
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nFrames = fread (fid,1,'int32');
frequency = fread (fid,1,'int32');
startTime = fread (fid,1,'float32');
nTracks = fread (fid,1,'int32');
D = fread (fid,3,'float32');
R = (fread (fid,[3,3],'float32'))';
T = fread (fid,3,'float32');
fseek (fid,4,'cof'); %skip Flags field
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% read links information
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (1 == tdfBlockEntries(blockIdx).Format) | (3 == tdfBlockEntries(blockIdx).Format) % with links
nLinks = fread (fid,1,'int32');
fseek (fid,4,'cof');
links = fread (fid,[2,nLinks],'int32');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% read tracks information
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
labels = char (zeros (nTracks,256));
tracks = NaN * ones (nFrames,3*nTracks);
if (1 == tdfBlockEntries(blockIdx).Format) | (2 == tdfBlockEntries(blockIdx).Format) % by track
for trk=1:nTracks
label = strtok (char ((fread (fid,256,'uchar'))'), char (0));
labels (trk,1:length (label)) = label;
nSegments = fread (fid,1,'int32');
fseek (fid,4,'cof');
segments = fread (fid,[2,nSegments],'int32');
for s = 1 : nSegments
for f = segments(1,s)+1 : (segments(1,s)+segments(2,s))
tracks(f,3*(trk-1)+1:3*(trk-1)+3) = (fread (fid,3,'float32'))';
end
end
end
elseif (3 == tdfBlockEntries(blockIdx).Format) | (4 == tdfBlockEntries(blockIdx).Format) % by frame
for trk=1:nTracks
label = strtok (char ((fread (fid,256,'uchar'))'), char (0));
labels (trk,1:length (label)) = label;
end
tracks = (fread (fid,[3*nTracks,nFrames],'float32'))';
end
save F:\Donnetracks.txt tracks -ascii;% sauvegarde les données lues sous un format texte;
%load F:\Donnetracks.txt;
i=size(tracks)% donne les dimensions du tableau de données;
j=i(1,1)%Nombre de lignes du tableau de données;
k=i(1,2)%nombre de colones du tableau de données;
figure(1)%ouvre une fenêtre pour faire le graphe;
plot(tracks);% donne touts les graphes qui sont dans le fichier de données colonne par colonne sur la même figure;
title('tout les graphes venant des données colone par colone');% Donne l'intitulé du graphe créé;
grid on;%affiche les grilles selon les coordonnées des axes;
g=input('entrez le N° du graphe que vous souhaitez voir:')% selection du graphe que l'on souhaite voir tout seul;
figure(2)
hold off;
hold on;%garde en mémoire le premier graphe déjà inscrit sur la figure 2;
plot(tracks(1:j,g),'.','DisplayName', 'tracks(1:g,2)');%graphique avec des"."des données expérimentales sélectionnée;
plot(tracks(1:j,g));%graphique en ligne de la même courbe pour permettre de voir les données NAN;
title ('le graphe sélectionné est');
grid on;
hold off;
figure(3)
h=surf(tracks(1:100,1:g));%affiche les 100 premiers points des g graphes sélectionnés;
figure(4)
x=(1:j);%valeurs des x pour faire le graphe des points expérimentaux;
xi=(1:0.5:j);% valeur des xi, avec l'interval de calcul, pour faire le graphe d'interpolation des xi;
y=tracks(x,g)% valeur en y des valeurs sélectionnées pour faire le graphe des points expérimentaux;
yi = interp1(x,y,xi,'cubic');%yi correspondants aux points xi recalculés pour l'interpolation avec la méthode de la ligne 123(cubic);
title ('resultat de l''interpolation');
hold on;
plot (x,y,'o');%graphe des points expérimentaux avec des o comme symbole;
plot (xi,yi,'.');% graphe des points d'interpolation calculés par la méthode sélectionnée en ligne 123 avec des . comme symbole;
grid on;
hold off;
for t=1:j;% le nombre de lignes dans le tableau de données;
t;%valeur de l'indice t;
tracks(t,g);%valeur des tracks a l'indice t;
u = isnan(tracks(t,g));%sélectionne les points non numérique dans le tableau de données;
if u==1;%valeur pour lesquelles tracks est non numérique;
t
u
tracks(t,g) = (tracks(t-100,g));%essaie de trouver un t-100 tracks qui soit numériquement acceptable;
tracks(t,g);%affiche le nouveau tracks
%v=input ('cela s''arrete la');% arrête le programme pour tout point non numérique;
end
end
figure (5)
plot (tracks(:,g),'.')% affiche le résultat apres la modification de t-100 points;
v=input( 'bonjour le programme ')
%tdfFileClose (fid); |