Bonjour,
Cette discussion fait suite à celle-ci à titre d'information.
Je souhaite afficher une série de points 3D dans un graphique 3D, mais bloquer la vue selon une direction, de telle sorte que l'utilisateur ne puisse pas tourner le graphique avec les options disponibles. Cela est-il faisable ?
Par exemple, le code suivant affiche les pôles d'un système dans un graphique 3D (sur 'x' la partie réelle, sur 'y' la partie imaginaire et sur 'z' l'indice) et affiche la vue dans une certaine direction :
Je voudrais donc déjà, en premier lieu, bloquer la vue. (tourner la vue est l'une des options disponibles au dessus du graphique).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 sys=tf([1], [1 2 3 4 5]); % ma fonction de transfert mesPoles=pole(sys); % mes poles [m,n]=size(mesPoles); % le nombre de poles dans m x=real(mesPoles); % partie réelle des poles y=imag(mesPoles); % partie imaginaire des poles z(m)=0; % indice de repérage des poles for k=1:1:m z(k) = k; end plot3(x,y,z,'x'); % mon graphique avec des croix pour chaque point view([0 0 1]) % vue de dessus
Mon objectif final est de récupérer les données (d'un point de vue programmation) qui ont permis de tracer le pôle sur lequel l'utilisateur va cliquer : pas seulement les valeurs 'x' & 'y', mais également l'indice 'z' qui me permet de les repérer dans "mesPoles". Je crois que j'ai déjà une piste avec "datacursormode"... j'ai donc déjà ma petite idée pour ce problème, mais pas pour le premier qui consiste à bloquer la vue. (A moins que quelqu'un sache directement comment récupérer l'indice des points tracés dans une vue 2D)
Je vous remercie par avance pour toute aide.
Cordialement,
[EDIT] Après recherches un peu plus approfondies, j'ai trouvé comment récupérer l'indice du point sélectionné. Je l'ai appliqué sur un graphique 2D et ça marche bien (du moins ça l'affiche dans la console en temps réel). Exemple :
Maintenant, il faut encore que je sache comment je peux traiter ces données en temps réel dans mon programme pour faire ce que je veux, mais ça, c'est un autre problème.
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 function testPoles sys = tf([1], [1 2 3 4 5]; mesPoles = poles(sys); f=figure(1); plot(mesPoles, 'x') dcm_obj=datacursormode(f); set(dcm_obj, 'enable', 'on', ... % activation du curseur 'snaptodatavertex', 'on', ... % le curseur s'aligne sur les points donnés uniqumeent 'displaystyle', 'datatip', ... % mode d'affichage (window ou datatip) 'UpdateFcn', @myupdatefcn); function [txt, pos, indice] = my updatefcn(empt, event_obj) pos = get(event_obj, 'Position') % récupère et affiche les coordonnées x et y du point indice = get(event_obj, 'DataIndex') % récupère et affiche l'indice du point txt = {['Re: ', num2str(pos(1))], ['Im: ', num2str(pos(2))], ['Index: ', num2str(indice)]}; end end
Il n'empêche que j'aimerai savoir s'il est possible de bloquer la vue 3D.
Partager