Está en la página 1de 20

Captulo 5

Grficos 3D
Contenido: 5.1 La orden plot3 5.2 Trazado de superficies con mesh y surf 5.4 La orden contour 5.5 Colores, luz y sombra 5.6 Puntos de vista 5.7 Superficies en forma paramtrica 5.8 Superficies especiales 5.9 Resumen

66

5.1 La orden plot3


La orden homloga de plot en dimensin 3 es plot3, que permite trazar la trayectoria seguida por un conjunto de puntos, definidos, en este caso, por medio de tres vectores con la misma longitud. Si designamos con x, y y z a los tres vectores implicados, plot3(x,y,z) produce un dibujo en perspectiva de la curva lineal a trozos que une los puntos cuyas abscisas, ordenadas y cotas estn especificadas, respectivamente, por x, y, z. Ilustramos la forma de trabajar de esta orden dibujando un segmento de hlice circular, cuyas ecuaciones paramtricas son x = cos t y = s int z=t para t=[0,4*pi].
t=linspace(0,4*pi,1024); plot3(cos(t) ,sin(t),t);

15

10

0 1 0.5 0 -0.5 -1 -1 -0.5 0.5 0 1

A veces es til producir la grfica de forma que se pueda observar su progresin. El comando comet3(x,y,z), como anlogo al plot3(x,y,z), realiza la misma grfica en forma de animacin, mostrando algo similar a la cola de un cometa.

67

5.2 Trazado de superficies con mesh y surf


El comando mesh(x,y,z) dibuja un modelo de alambre de la superficie z=f(x,y). Habitualmente, se prepara una malla preliminar en el plano x,y mediante la orden [X, Y]=meshgrid(x,y) que genera una malla regular en dicho plano, basada en los elementos de los vectores x e y. Las filas de X son copias de la fila x y las columnas de Y son copias de la columna transpuesto del vector y. Con esta tcnica, conseguimos una malla de puntos donde es posible especificar los valores z de una superficie.
x=[-2:0.1:2]; y=[-2:0.1:2]; [X,Y]=meshgrid(x,y);

El aspecto que presenta la malla as construida se puede obtener ejecutando


plot(X,Y,'.') :

2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2

-1.5

-1

-0.5

0.5

1.5

Seguidamente, especificamos los valores de z en cada punto de la malla. Si deseamos obtener una grfica de la cudrica "silla de montar", podemos escribir
Z=X.^2-Y.^2;

Finalmente, dibujamos el modelo de alambre de la superficie:


mesh(X,Y,Z)

68

El color asociado con cada punto de cada 'alambre' es proporcional a su altura sobre el plano xy. Existe un mapa de colores por defecto que, como veremos ms adelante, es posible cambiar. Si ZZ es una matriz de m filas y n columnas, el comando mesh(ZZ) dibuja un modelo sobre la malla 1:m, 1:n, tomando como valores de z los elementos correspondientes de la matriz ZZ. Otro mtodo para trazar superficies hace uso del comando surf. La apariencia de las grficas es la misma, pero en esta caso el protagonismo corresponde a las facetas, habitualmente de forma cuadrangular, dentro de las cuales el color es homogneo, que se calcula, como en el caso anterior, interpolando el centro de gravedad de cada faceta.
x=[-2:0.1:2]; y=[-5:0.1:5]; [X, Y]=meshgrid(x,y); Z=(-1+X.^2+Y.^2).*exp(-X.^2-X.^2); surf(X,Y,Z)

69

Si se desea aadir una "cortina" adaptada a los bordes de la superficie, constituida por segmentos paralelos al eje z, que van desde los bordes hasta el plano xy, se puede hacer uso de la funcin meshz.
x=linspace(0,3,30); y=linspace(-3,0,30); [X Y]=meshgrid(x,y); Z=sin(X).*sin(Y).*sin(X.*Y); meshz(X,Y,Z); colormap(copper);

70

5.3 Datos con muestreo irregular


Cuando los puntos del plano xy en los que se conoce el valor de z no constituyen una malla regular, es necesario proceder a generarla mediante mecanismos de interpolacin, antes de hacer uso de los comandos mesh o surf. El proceso completo se puede descomponer en cuatro etapas: a) Determinar xmin, xmax, ymin, ymax para los datos de partida y generar valores con espaciado homogneo mediante la orden linspace sobre ambos ejes; b) Hacer uso del comando meshgrid para deducir una malla regular; c) Hacer uso de griddata para interpolar los valores de z correspondientes a la malla regular antes calculada, haciendo uso para ello de los valores de z con muestreo irregular, que son los datos de partida; d) Hacer uso de los comandos mesh o surf para establecer la grfica sobre la malla regular. Ilustramos el algoritmo con un ejemplo: Generamos muestras distribuidas al azar sobre los ejes x e y, controlando los valores mnimos y mximos correspondientes:
x=rand(100,1)*16-8; y=rand(100,1)*16-8; r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r; xx=linspace(min(x),max(x),33);

71

yy=linspace(min(y),max(y),33); [X,Y]=meshgrid(xx,yy); Z=griddata(x,y,z,X,Y,'cubic'); mesh(X,Y,Z); hold on; plot3(x,y,z,'.','MarkerSize',16); hold off;

5.4 La rdenes contour y quiver


La superficie manejada en la seccin anterior puede describirse mediante la orden contour, que permite dibujar en el plano xy las proyecciones de un conjunto de lneas de nivel, cuyas cotas o cuyo nmero se puede especificar. Si escribimos
x=[-2:0.1:2]; y=[-5:0.1:5]; [X, Y]=meshgrid(x,y); Z=(-1+X.^2+Y.^2).*exp(-X.^2-X.^2); contour(X,Y,Z,12)

dibujamos 12 lneas de nivel con colores seleccionados de acuerdo con la cota de cada una de ellas.

72

Si Z es una matriz mxn, contour(z) dibuja lneas de nivel de la superficie construida con las cotas especificadas por z. En cualquier caso, se puede aadir como parmetro un vector v, de forma que se trazan longitud(v) lneas, que son proyecciones de las lneas de nivel de cotas dadas por los elementos del vector v. El color de las lneas se puede fijar mediante un parmetro adicional, con las mismas cadenas de caracteres utlizadas para la orden plot. Si designamos con C la matriz que devuelve la ejecucin de la orden contour, con clabel(C) colocamos una seal y un nmero indicando la cota de cada lnea y con clabel(C,v), hacemos figurar una etiqueta con el valor de la cota descrita por el vector v al lado de cada lnea.
C=contour(X,Y,Z,12); clabel(C)

5 4 3 2 1 0 -1 -2 -3 -4 -5 -2 -1.5

2.85

12.516.3 6.69

20.2 18.2 14.4 8.62 10.5 0.923

4.77

0.923

2.85 6.69 10.5 12.5 8.62 14.420.2 4.77

16.3 18.2 22.1 0.5 1 1.5 2

-1

-0.5

Tambin es posible dibujar las curvas de nivel sin realizar la proyeccin:


contour3(X,Y,Z,50)

73

25 20 15 10 5 0 -5 5 2 0 -1 -5 -2 1 0

Es posible conseguir un rellanado de color entra las lneas de nivel proyectadas. El color establece una correspondencia entre las lneas y su cota relativa. La orden de MATLAB para esta clase d grfica es fcontour:
[x y]=meshgrid(linspace(0,2*pi,30),linspace(0,pi,30)); z=sin(x).*cos(y+pi/2); contourf(z);

74

30

25

20

15

10

10

15

20

25

30

Para obtener una grfica del campo vectorial de gradiente de un campo escalar, MATLAB dispone de la funcin quiver, que dibuja flechas que apuntan en la direccin de crecimiento o decrcimiento de un campo numrico descrito por una matriz y que tienen longitudes relativas proporcionales a la pendiente que les corresponde. Ilustramos la accin de quiver con las matrices X,Y,Z que hemos manejado para contour. En primer lugar, determinamos el espaciado de clculo para los elementos de las matrices X e Y, respectivamente, adecuadamente submuestreadas para que las flechas rsulten visibles. Adems, usamos la funcin diff, que determina diferencias sucesivas:
X=X(1:5:101,1:2:41); Y=Y(1:5:101,1:2:41); Z=Z(1:5:101,1:2:41); dy=10*diff(X(1,1:2)); dx=10*diff(Y(1:2,1)); [PX,PY]=gradient(Z,dx,dy); quiver(X,Y,PX,PY,1,'b');

Los vectores X,Y especifican la situacin de las flechas, PX,PY su direccin y magnitud. El siguiente parmetro (aqu hemos colocdo un valor unidad) la escala para la longitud. Finalmente, se puede aadir el color y estilo en la forma ya utlizada con la orden plot.

75

-2

-4

-6 -2

-1.5

-1

-0.5

0.5

1.5

Para obtener informaciones complementarias a partir de los datos disponibles, se pueden combinar las opciones di dibujo. Por ejemplo, meshc combina la accin de los comandos mesh y contour.
[x y]=meshgrid(0.:0.25:4*pi); z=sin(x+sin(y))-x/10; meshc(x,y,z);

76

5.5 Colores, luz y sombra


El sombreado de una superficie es una propiedad que se consigue mediante el comando shading, que tiene tres parmetros posibles: shading faceted shading interp shading flat La primera orden traza de nuevo la superficie como una malla construida con facetas de forma cuadrangular y color constante. Es el valor por defecto con la orden surf. La segunda interpola suavemente los colores sobre la superficie. Y mediante la tercera , todas las facetas conservan un color constante, prescindiendo de la malla que las delimita. La funcin peaks produce una muestra de valores de una funcin de dos variables (por defecto 49x49) obtenidas por traslacin y dilatacin de muestras gaussianas. Resulta de utilidad para mostrar el efecto de shading sobre una superficie trazada con surf.
Z=peaks; surf(Z); shading interp;

77

MATLAB utiliza mapas de color para dibujar superficies, y, en general, cada ventana grfica tiene un mapa de color asociado. Un mapa de color est especificado por una matriz de m filas y tres columnas, cada una de las cuales indica la cantidad de rjo, verde y azul, respectivamente. Si la matriz de color (colormap) tiene m filas, tenemos m posibilidades diferentes para los puntos de la grfica en consideracin. El sistema establece una aplicacin entre cada punto de la grfica y una fila del mapa de colores a travs de un ndice que, habitualmente, es calculado realizando una proporcin entre las intensidades mxima y mnima presentes en la grfica y el mapa disponible. Para asociar un mapa de colores particular con una ventana grfica, hacemos uso del comando colormap('cm'), donde 'cm' es una cadena de caracteres con el nombre del mapa. En la tabla siguiente se indican los coeficientes de proporcin de cada color fundamental, R, G, B, respectivamente, en las tres primeras columnas y el nombre del color combinado en la tercera. En todos los casos se trata de posibles filas de matrices que describen mapas de color. 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 black white red green blue

78

1 1 0 0.5

1 0 1 0.5

0 1 1 0.5

yellow magenta cyan gray

MATLAB dispone de 11 mapas predefinidos: gray(m) hsv(m) hot(m) cool(m) bone(m) copper(m) pink(m) flag(m) prism(m) jet(m) white(m) autumn(m) winter(m) Naturalmente, es posible construir mapas de colores adaptados a las necesidades del usuario, disponiendo una matriz mx3 cuyos elementos son cantidades entre 0 y 1.
x=linspace(0,3*pi,256); linspace(0,4*pi,256); [xx yy]=meshgrid(x,y); z=sin(xx).*sin(yy); surf(z); colormap('gray'); shading interp;

Se pueden aadir fuentes de luz adicionales para generar sombras relacionadas con la luz direccional. La funcin ligth crea una fuente infinitamente lejana de luz en la direccin del vector [1 0 1]. Una vez creada la fuente de luz, la iluminacin se puede activar en una de cuatro modalidades: lighting none lighting flat lighting phong

79

lighting gouraud
[x y]=meshgrid(-3:0.125:3); z=peaks(x,y).*sin(x); surf(x,y,z);

shading interp; colormap(copper); light; lighting gouraud;

La orden surfl tambin aade propiedades de luz a las superficies. El comando surfl(x,y,z,ls,r) hace el mismo trabajo que surf, coloca una luz a distancia infinita en la direccin del vector ls y permite contribuciones, a travs del parmetro r, de otras clases de luz: ambiente, difusa, especular y distribuda. r=[amb, dif, esp, dis]
[x y]=meshgrid(-2:.2:2, -2:.2:2); z=x.*exp(-x.^2-y.^2);

80

ls=[-3, 3, 2]; surfl(x,y,z,ls,[0, 1, 1, 0]); shading interp; colormap(gray);

5.6 Puntos de vista


La orden view permite regular el punto de vista del observador para obtener la perspectiva ms conveniente para una estructura 3-D. El comando completo es view(azimut, elevacin), donde el azimut se mide a partir del eje y negativo, en sentido de ngulos positivos. La elevacin, se mide a travs del ngulo con el plano xy. Los valores por defecto son azimut=-37.5 y elevacin=30. La orden view se puede usar tambin de la forma siguiente:

81

view(2) vista 2-D por defecto, AZ = 0, EL = 90. view(3) vista 3-D por defecto, AZ = -37.5, EL = 30.

Elevacin Azimut

5.7 Superficies en forma paramtrica


n=2^6-1; theta=pi*(-n:2:2*n)/n; phi=2*pi*(0:2:n)'/n; x=(2+0.5*cos(phi))*cos(theta); y=(2+0.5*cos(phi))*sin(theta); z=0.5*sin(phi)*ones(size(theta)); surf(x,y,z); colormap(copper); shading interp;

82

view(2)

5.8 Superficies especiales


83

La orden [X,Y,Z] = sphere(N) genera tres matrices (n+1)x(n+1) de forma que surf(X,Y,Z) traza la esfera unidad. El valor por defecto es N=20. Si no extraemos las matrices X,Y,Z, se produce el dibujo de la matriz, sin devolver ningn nmero. Ver tambin la orden cylinder.
[x y z]=sphere(25); surf(x-3,y-2,z);

hold on; surf(x*2,y*2,z*2);

5.9 Resumen
Comandos nuevos comentados en este Captulo: clabel contour contour3 contourf colormap cylinder diff gradient griddata

84

light lighting mesh meshc meshgrid meshz peaks plot3 quiver shading sphere surf surfl view

85

También podría gustarte