Gráficos tridimensionales

Curvas tridimensionales

El caso más sencillo se presenta cuando x, y y z son funciones de un parámetro t. Utilizamos el comando plot3 para dibujar la línea tridimensional.

x=sin(t)
y=cos(t)
z=0.2·t

t=0:0.1:6*pi;
x=sin(t);
y=cos(t);
z=0.2*t;
plot3(x,y,z,'b')
grid on
xlabel('x'); ylabel('y'); zlabel('z')

Superficies tridimensionales

Algo más complicado es mostrar una superficie tridimensional descrita por una función de dos variables z=f(x,y)

El primer paso es crear una rejilla en el plano XY que cubra el dominio de la función y el segundo paso consiste en el cálculo del valor de z para cada uno de los puntos de la rejilla.

En la figura se muestra el conjunto de puntos del plano XY para el dominio -2≤x≤3, -1≤y≤3 con espaciado de una unidad. Los puntos de la rejilla se definen mediante dos matrices. La matriz X guarda las abscisas de los puntos y la matriz Y las ordendas de dichos puntos. La función meshgrid de MATLAB crea la matriz X y la matriz Y.

>> x=-2:2;
>> y=-3:3;
>> [X,Y]=meshgrid(x,y)
X =
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
Y =
    -3    -3    -3    -3    -3
    -2    -2    -2    -2    -2
    -1    -1    -1    -1    -1
     0     0     0     0     0
     1     1     1     1     1
     2     2     2     2     2
     3     3     3     3     3

Se calculan los valores de z=f(x,y) para cada unos de los puntos de la rejilla. En este caso z=x2-y2

>> Z=X.^2-Y.^2
Z =
    -5    -8    -9    -8    -5
     0    -3    -4    -3     0
     3     0    -1     0     3
     4     1     0     1     4
     3     0    -1     0     3
     0    -3    -4    -3     0
    -5    -8    -9    -8    -5

Incrementamos la resolución y dibujamos la superficie mediante la función mesh,

x=-2:0.1:2;
y=-3:0.1:3;
[X,Y]=meshgrid(x,y);
Z=X.^2-Y.^2;
mesh(X,Y,Z);
xlabel('X')
ylabel('Y')
zlabel('Z')

Alternativamente, podemos dibujar la misma superficie utilizando la función surf.

Vamos a dibujar la función

z= sinr r r= x 2 + y 2

en el dominio el dominio -7≤x≤7, -7≤y≤7 con espaciado de 0.25. Evitamos a indeterminación 0/0 en el origen sumando eps a r.

El color de cada elemento de superficie está determinado por el valor de z y el mapa de colores (una lista ordenda de colores)

[x,y] = meshgrid(-7:0.25:7);
r = sqrt(x.^2 + y.^2) + eps;
z = sin(r)./r;
surf(x,y,z)
colormap hsv
colorbar
xlabel('x'); ylabel('y'); zlabel('z')

Superficies definidas de forma paramétrica

Coordenadas esféricas

x=r·cosφ·sinθ
y=r·sinφ·sinθ
z=r·cosθ

donde 0≤r≤1, 0≤φ≤2π, 0≤θ≤π/2

La superficie cónica se define para un valor θ fijo

theta=pi/3;
r=linspace(0,1,30);
phi=linspace(0,2*pi,30);
[r,phi]=meshgrid(r,phi);
x=r.*cos(phi)*sin(theta);
y=r.*sin(phi)*sin(theta);
z=r*cos(theta);
mesh(x,y,z)
xlabel('x'); ylabel('y'); zlabel('z')
title('Superficie cónica')

Dibujamos una superficie esférica, y sobre ella el punto P de coordenadas φ y θ

%esfera
R=1;
phi=linspace(0,pi,30);
theta=linspace(0,2*pi,40);
[phi,theta]=meshgrid(phi,theta);
x=R*sin(phi).*cos(theta);
y=R*sin(phi).*sin(theta);
z=R*cos(phi);
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0.6,0.6,0.6]);
%probar una superficie esférica semitransparente
%set(h1,'EdgeColor',[0.6,0.6,0.6],'EdgeAlpha',0.5,'FaceAlpha',0.5) 

%paralelo
theta=pi/3;
phi=0:0.1:2*pi+0.1;
x=sin(theta)*cos(phi);
y=sin(theta)*sin(phi);
z=cos(theta)*ones(1,length(x));
h1=line(x,y,z);
set(h1,'Color',[.7,0,0],'LineWidth',1.5)
%meridiano de referencia
phi=0;
theta=-pi:0.1:pi;
x=sin(theta)*cos(phi);
y=sin(theta)*sin(phi);
z=cos(theta);
h1=line(x,y,z);
set(h1,'Color',[0,0,.7],'LineWidth',1)
%meridiano
phi=-pi/6;
theta=-pi:0.1:pi;
x=sin(theta)*cos(phi);
y=sin(theta)*sin(phi);
z=cos(theta);
h1=line(x,y,z);
set(h1,'Color',[.7,0,0],'LineWidth',1.5)

axis equal
view(60,10)
hold off
xlabel('x'); ylabel('y'); zlabel('z')
title('Superficie esférica')

Secciones cónicas

Las secciones cónicas (elipse, hipérbola y parábola) es el resultado de la intersección de una superficie cónica y un plano

%superficie cónica
theta=pi/4;
r=linspace(-1,1,40);
phi=linspace(0,2*pi,30);
[r,phi]=meshgrid(r,phi);
x=r.*cos(phi)*sin(theta);
y=r.*sin(phi)*sin(theta);
z=r*cos(theta);
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0.6,0.8,0.6])

%plano horizontal
[x,y]=meshgrid(-1:0.2:1);
z=0.5*ones(size(x));
hold on
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0,0,0.8])
axis equal
view(120,40)
hold off
xlabel('x'); ylabel('y'); zlabel('z')
title('Secciones cónicas')

%superficie cónica
theta=pi/4;
r=linspace(-1,1,40);
phi=linspace(0,2*pi,30);
[r,phi]=meshgrid(r,phi);
x=r.*cos(phi)*sin(theta);
y=r.*sin(phi)*sin(theta);
z=r*cos(theta);
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0.6,0.8,0.6])

%plano vertical
[y,z]=meshgrid(-1:0.2:1);
x=0.3*ones(size(y));
hold on
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0,0,0.8])
axis equal
view(25,10)
hold off
xlabel('x'); ylabel('y'); zlabel('z')
title('Secciones cónicas')

Probar el siguiente código para obtener una elipse

%superficie cónica
theta=pi/4;
r=linspace(-1,1,40);
phi=linspace(0,2*pi,30);
[r,phi]=meshgrid(r,phi);
x=r.*cos(phi)*sin(theta);
y=r.*sin(phi)*sin(theta);
z=r*cos(theta);
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0.6,0.8,0.6])

%plano inclinado
[x,y]=meshgrid(-1:0.2:1);
z=0.5*y+0.35; % probar, z=y+0.35; 
hold on
h1=mesh(x,y,z);
set(h1,'EdgeColor',[0,0,0.8])
axis equal
view(25,40)
hold off
xlabel('x'); ylabel('y'); zlabel('z')
title('Secciones cónicas')

Ejemplos

1.-Tiro parabólico 3D

Se dispara un proyectil con velocidad de 60 m/s haciendo un ángulo de 30°, desde la ventana del vagón de un tren en movimiento a lo largo del eje X con velocidad de 20 m/s. Tómese g=10 m/s2

Ecuaciones del movimiento

{ a x =0 a y =0 a z =10 { v x =20 v y =30 3 v z =3010·t { x=20t y=30 3 ·t z=30·t5· t 2

El proyectil alcanza la máxima altura cuando vz=0, en el instante t=3 s, la altura es de zmax=45 m.

El proyectil impacta contra el suelo cuando z=0, en el instante t=6 s. En este instante las coordenadas del punto de impacto son: x=120 m, y=311.8 m

t=linspace(0,6,50);
z=30*t-5*t.^2;
y=30*sqrt(3)*t;
x=20*t;
plot3(x,y,z)
grid on
axis([0 150 0 350 0 50])
xlabel('x (m)'); ylabel('y (m)'); zlabel('z (m)')

Utilizar la herramienta Rotate 3D del menú Figure Window para cambiar el ángulo de visualización de la parábola.

2.-Dibujar al función

z= x y 2 x 2 + y 2 1x31y4

x=-1:0.1:3;
y=1:0.1:4;
[X,Y]=meshgrid(x,y);
Z=(X.*Y.^2)./(X.^2+Y.^2);
mesh(X,Y,Z);
xlabel('X')
ylabel('Y')
zlabel('Z')

3.- Dibujar la función

z=rθ 0θ3600r2

Utilizar la función pol2cart para convertir coordenadas polares a coordenadas rectangulares.

r=0:0.1:2;
angulo=(0:5:360)*pi/180;
[Ang,Radio]=meshgrid(angulo,r);
Z=Radio.*Ang;
[X,Y] = pol2cart(Ang,Radio);
mesh(X,Y,Z)

Ejemplos en el curso de Física

Movimiento relativo de rotación uniforme

Modos de vibración de una membrana rectangular

Modos de vibración de una membrana circular

Posición del Sol en el Sistema de Referencia Local