2 votes

comment produire ce graphique 3D particulier à partir de données scalaires en Matlab ?

J'essaie de produire ce graphique à l'aide de Matlab. La fonction ellipsoïde intégrée est déroutante. Pour ce problème, j'ai deux variables (largeur et longueur) et une hauteur constante.

Pour faire très simple, je veux montrer que la largeur change lorsque nous nous approchons de la pointe mais que la hauteur est constante. w, x, h sont les variables indiquées dans le graphique.

J'apprécierais vraiment que quelqu'un puisse m'aider.

3D plot

3voto

Floris Points 31305

Le code suivant vous permet de faire un bon bout de chemin, je pense. Voir l'exemple de sortie : enter image description here

J'ai ajouté suffisamment de commentaires pour que vous puissiez prendre la suite...

% plot ellipsoid in 3D

% height and width of ellipsoid:
e_h = 10;
e_w = 3;

% position where the "quivers" (arrows) go:
q_offset = 2;    % distance from axis
q_scale = 0.5;   % multiplier to give parabola some size
q_spacing = 0.5; % distance between arrows
q_height = 2.5;  % height above XY plane where arrows are drawn
N = 1000;        % number of points for drawing

theta = linspace(0, 2*pi, N); % parameter to help drawing ellipse
zerov = zeros(1, N);          % array of zeros that I will need

% coordinates of main ellipse:
x = e_w * sin(theta);
y = zeros(size(x));
z = e_h * cos(theta);

% plot main ellipse:
figure;
plot3(x, y, z)

% secondary plot
y2 = q_scale*(e_w.^2 - x.^2) + 2; % offset parabola - what your plot looked like...
hold on
plot3(x, y2, zerov+q_height);     % plotting the parabola in the XY plane at height
axis equal % make the plot dimensions isotropic

% add quivers
q_base = -e_w:q_spacing:e_w; % x coordinate; y and z are fixed
q_length = (e_w.^2 - q_base.^2)*q_scale; % length of quiver - just an equation I chose
q0 = zeros(size(q_base)); % another vector I will need multiple times
q1 = ones(size(q_base));  % ditto

% plot the arrows: the "-1" argument means "don't scale"
quiver3(q_base, q0+q_offset, q_height*q1, q0, q_length, q0, -1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X