Bonjour à tous,
j'ai poster un message sur ce forum il y a quelques jours pour un problème de vitesse, et vos réponses m'ont vraiment aidé.
Il se trouve que j'ai une deuxième question :
Comment puis-je faire pour actualiser une figure. Je m'explique :
j'affiche dans une figure un squelette humain (calculs de matrices de translation et rotation) pour une position, ou une autre et ça marche plutôt bien. (je vous joins la figure juste pour voir)
Et j'aimerais pouvoir l'animer, comme si c'était une vidéo, à savoir afficher les frames les une à la suite des autres.
Toutes vos remarques peuvent être intéressantes alors n'hésitez pas (même si vos remarques ne sont pas directement liées à ma question, je pense par exemple à une personne qui me dirait : tu devrais même une autre couleur..., je suis preneur).
Voici mon code même si vous ne pourrez pas l'exécuter car certaines variables dépendent d'autres programmes qui dépendent alors de mon fichier de données.
Et quand même la fonction R qui est appelée à de nombreuses reprises (qui est lente en passant)
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 data{1,1} base=rus1{10,2} for i=1:27 if i==1 % DaveRoot q=[0,0,0]'; s=R(0,0,0,base); elseif i==2 % Pelvis q=p(:,1); s=r(:,:,1); elseif i==3 % Spine1 q=p(:,1); s=r(:,:,1); elseif i==4 % Lefthip q=p(:,1); s=r(:,:,1); elseif i==9 % Righthip q=p(:,1); s=r(:,:,1); elseif i==14 % Spine2 q=p(:,i-11); s=r(:,:,i-11); elseif i==17 % Neck q=p(:,i-1); s=r(:,:,i-1); elseif i==20 % L Clavicle q=p(:,i-4); s=r(:,:,i-4); elseif i==24 % R Clavicle q=p(:,i-8); s=r(:,:,i-8); else q=p(:,i-1); s=r(:,:,i-1); end p(:,i)=q+s*[data{1,1}(i,1),data{1,1}(i,2),data{1,1}(i,3)]'; r(:,:,i)=s*R(data{1,1}(i,4),data{1,1}(i,5),data{1,1}(i,6),base)*R(data{1,200}(i,4),data{1,200}(i,5),data{1,200}(i,6),base); v=data{1,1}(i,7)*r(:,2,i); line(p(1,i)+[0,v(1)],p(2,i)+[0,v(2)],p(3,i)+[0,v(3)],'color','k') pause(0); % line(p(1,i)+k*[0,r(1,1,i)],p(2,i)+k*[0,r(2,1,i)],p(3,i)+k*[0,r(3,1,i)],'color','r') % line(p(1,i)+k*[0,r(1,2,i)],p(2,i)+k*[0,r(2,2,i)],p(3,i)+k*[0,r(3,2,i)],'color','g') % line(p(1,i)+k*[0,r(1,3,i)],p(2,i)+k*[0,r(2,3,i)],p(3,i)+k*[0,r(3,3,i)],'color','b') end set(findobj('type','line'),'linewidth',2) set(findobj('type','line','color','k'),'linewidth',2) view(3) box on axis equal xlabel('x') ylabel('y') zlabel('z')
Merci d'avance.
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 function R=R(a,b,c,base) cosd=inline('cos(v/360*2*pi)'); sind=inline('sin(v/360*2*pi)'); Rx=[1, 0, 0; 0, cosd(a), -sind(a); 0, sind(a), cosd(a)]; Ry=[cosd(b), 0, sind(b); 0, 1, 0; -sind(b), 0, cosd(b)]; Rz=[cosd(c), -sind(c), 0; sind(c), cosd(c), 0; 0, 0, 1]; if (strcmp(base,'XZY')) R=Rx*Rz*Ry; end if (strcmp(base,'XYZ')) R=Rx*Ry*Rz; end if (strcmp(base,'YXZ')) R=Ry*Rx*Rz; end if (strcmp(base,'YZX')) R=Ry*Rz*Rx; end if (strcmp(base,'ZYX')) R=Rz*Ry*Rx; end if (strcmp(base,'ZXY')) R=Rz*Rx*Ry; end
Partager