Bonjour à tous,

J'ai déjà créé un topic la semaine dernière pour réaliser un maillage (voir ici) et comme j'en veux toujours plus et que je ne suis pas très doué, je reviens à la charge pour avoir d'autres infos.

Donc voilà je souhaiterais faire la même chose que dans l'autre topic, sauf que je veux le faire en 3D. Je m'y suis attaqué tranquillement hier soir, en prenant le temps d'y aller étape par étape, et là je bloque.

Voici mon code provisoire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
%maillage 3D x,y,vitesse
 
clear all
clc
close all
 
%==========================================================================
%Load de mes données
 
Traj1=load('E:\Mes docs\pour_daniel\callac\resultats_19avr\Trajectoire_Fusion_fuite_19avr.txt');
Traj2=load('E:\Mes docs\pour_daniel\callac\resultats_19avr\Trajectoire_Vision3D_arriv_19avr.txt');
Traj=[Traj2;Traj1];
 
 
 
%==========================================================================
%Extraction de mes coordonnées x et y et de la vitesse
 
x=Traj1(:,11);
y=Traj1(:,10);
v=3.6*Traj1(:,17);
 
x=round(10*x); %formule pour avoir une précision 0.1 m
y=round(10*y);
v=round(10*v)/10;
 
%==========================================================================
%Détermination de différentes valeurs utilisées par la suite sur les graphes
 
maxx=floor(max(x)/10+1)*10; % calcul des limites pour le maillage
minx=floor(min(x)/10)*10;
maxv=floor(max(v)/10+1)*10;
minv=floor(min(v)/10)*10;
maxy=floor(max(y)/10+1)*10;
miny=floor(min(y)/10)*10;
 
intx=(maxx-minx)/5; %calcul de l'intervalle des graduations pour l'affichage des axes
inty=(maxy-miny)/5;
intv=(maxv-minv)/5;
 
 
%==========================================================================
%Tracé du graphique représentants tous les points
 
figure
 
% subplot(211)
plot3(x,y,v,'r.')
% axis equal
set(gca,'xlim',[minx maxx],'ylim',[miny maxy],'zlim',[minv maxv],...    
    'xtick',minx:intx:maxx,'ytick',miny:inty:maxy, ...
    'xgrid','on','ygrid','on','zgrid','on')
 
hold on;
 
x=x-minx;
y=y-miny;
v=v-minv;
 
%==========================================================================
%fonction unique : retourne le vecteur xyv contenant les elements de la
%matrice [x(:) y(:) v(:)] triés dans un ordre croissant et sans répétitions
%L'ajout de rows permet de faire le trie en tenant compte des valeurs de
%toute la ligne.
 
[xyv,a,b] = unique([x(:) y(:) v(:)],'rows');
 
 
%==========================================================================
%fonction histc : permet, pour chaque coordonnées, de compter le nombre de
%points qui correspondent.
 
n=histc(b,unique(b));
 
 
%==========================================================================
%création du maillage à partir d'une matrice de 0
 
clear Traj1 Traj2 Traj 
 
M=zeros(maxx-minx,maxy-miny,maxv-minv);
idx = sub2ind(size(M),xyv(:,1),xyv(:,2),xyv(:,3));
idx=round(idx);
M(idx) = n;
 
% for i=1:90
% M=[M(:,:,i)];
% end
 
 
%==========================================================================
%tracé du maillage
 
% figure
subplot(212)
image('xdata',[0 maxx],'ydata',[0 maxy],'zdata',[0 maxv],'cdata',M.'+1)
 
colormap(hsv(max(n)+1));
c=colorbar;
set(c,'ytick',1:max(n)+1,'yticklabel',num2str((0:max(n)).'))
axis equal
set(gca,'xlim',[minx maxx],'ylim',[miny maxy],'zlim',[minv maxv],...
    'xtick',minx:intx:maxx,'ytick',miny:inty:maxy,'ztick',minv:intv:maxv, ...
    'xgrid','on','ygrid','on','zgrid','on',...
    'layer','top')
hold on

Quand je lance ceci, j'ai le message d'erreur suivant qui s'affiche :
??? Error using ==> transpose
Transpose on ND array is not defined.

Error in ==> maillage_3D at 106
image('xdata',[0 maxx],'ydata',[0 maxy],'zdata',[0 maxv],'cdata',M.'+1)
J'ai donc fait une petite recherche sur cette erreur, et j'ai vu qu'il fallait que je concatène ma matrice M (ici, tout en bas). Sauf que cette matrice M est de tres grande dimension (430x230x90) et par conséquent je n'arrive pas à appliquer la fonction "cat", si bien entendu c'est possible.

Donc voilà, je demande un peu d'aide pour cette concaténation. ET je souhaiterais également savoir si le fait de concaténer me permettra de créer mon image en 3D et de réaliser correctement mon maillage comme en 2D?

Merci par avance à tout le monde.