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 :

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
Je voudrais donc déjà, en premier lieu, bloquer la vue. (tourner la vue est l'une des options disponibles au dessus du graphique).

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 :

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
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.

Il n'empêche que j'aimerai savoir s'il est possible de bloquer la vue 3D.