Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
15
10
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
-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;
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
71
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
4.77
0.923
-1
-0.5
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
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
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);
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
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
82
view(2)
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);
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