Gráficos 3D en MATLAB
Pedro Corcuera
Dpto. Matemática Aplicada y
Ciencias de la Computación
Universidad de Cantabria
[email protected]
Objetivos
• Presentar la implementación de una amplia
selección de capacidades gráficas en tres
dimensiones
• Desarrollar la capacidad de generar gráficos
interactivamente
interactivamente
Matlab
2
Indice
• Líneas en 3D
• Superficies
• Creación de gráficos interactivamente
Matlab
3
Líneas en 3D
• La versión 3D de plot es
plot3(u1, v1, w1, c1, u2, v2, w2, c2,…)
donde
uj, vj, y wj son las coordenadas x, y, y z, respectivamente, de
un punto
un punto
Son escalares, vectores de la misma longitud, matrices del mismo
orden, o expresiones que, cuando se evalúan, resultan en una de
esas cantidades
cj es una cadena de caracteres
Un caracter especifica el color.
Un caracter especifica las características del punto
Uno o dos caracteres especifica el tipo de línea
Matlab
4
Líneas en 3D
• Para dibujar un conjunto de n líneas sin conectar
cuyos puntos finales son
(x1j,y1j,z1j) y (x2j,y2j,z2j), j = 1, 2, …, n
se crean seis vectores:
1
j
x = x x … x
j
2
• Así, plot3 es
• Así, plot3 es
y = y y … y
y = y y … y
j
1
j
2
j
z = z
j
jn
jn
j = ,
j = ,
1 2
1 2
j
j1
1
z … z
x1 = […]; x2 = […];
y1 = […]; y2 = […];
z1 = […]; z2 = […];
plot3([x1; x2], [y1; y2], [z1; z2])
donde [x1; x2], [y1; y2], y [z1; z2] son matrices de
(2×n)
jn
2
j
Matlab
5
Líneas en 3D
• Todos los procedimientos de anotación descritas para
los gráficos 2D son aplicables a las funciones de
generación de curvas y superficies 3D, excepto que
los argumentos de text se usa
text(x, y, z, s)
donde s es un string y
zlabel
se usa para etiquetar el eje z
Matlab
6
Ejemplo: Dibujo de cajas de alambres
• Se requiere una función BoxPlot3 que dibuje las
aristas (4) de cada una de las seis superficies de una
caja. La ubicación y orientación de la caja está
determinada por las coordenadas de la diagonal de
caras opuestas P(x ,y ,z ) and P(x +L , y +L , z +L )
caras opuestas P(xo,yo,zo) and P(xo+Lx, yo+Ly, zo+Lz)
z
(xo+Lx,yo,zo+Lz)
6
5
(xo,yo,zo+Lz)
(xo,yo,zo)
Lx
7
8
Ly
2
Lz
1
3
4
(xo,yo+Ly,zo+Lz)
(xo,yo+Ly,zo)
(xo+Lx,yo+Ly,zo+Lz)
y
x
(xo+Lx,yo,zo)
(xo+Lx,yo+Ly,zo)
Matlab
7
Ejemplo: Dibujo de cajas de alambres
function BoxPlot3(x0, y0, z0, Lx, Ly, Lz)
x = [x0, x0, x0, x0, x0+Lx, x0+Lx, x0+Lx, x0+Lx]; %(1×8)
y = [y0, y0, y0+Ly, y0+Ly, y0, y0, y0+Ly, y0+Ly]; %(1×8)
z = [z0, z0+Lz, z0+Lz, z0, z0, z0+Lz, z0+Lz, z0]; %(1×8)
index = zeros(6,5);
index(1,:) = [1 2 3 4 1];
index(2,:) = [5 6 7 8 5];
index(2,:) = [5 6 7 8 5];
index(3,:) = [1 2 6 5 1];
index(4,:) = [4 3 7 8 4];
index(5,:) = [2 6 7 3 2];
index(6,:) = [1 5 8 4 1];
for k = 1:6
(xo+Lx,yo+Ly,zo+Lz)
(xo+Lx,yo+Ly,zo)
(xo+Lx,yo,zo+Lz)
2
Lz
1
(xo+Lx,yo,zo)
(xo,yo,zo+Lz)
3
4
(xo,yo,zo)
Lx
y
y
6
5
7
8
Ly
z
z
(xo,yo+Ly,zo+Lz)
(xo,yo+Ly,zo)
x
plot3(x(index(k,:)), y(index(k,:)), z(index(k,:)))
hold on
end
Matlab
8
Ejemplo: Dibujo de cajas de alambres
• El script para generar tres cajas con las siguientes
dimensiones y coordenadas (xo, yo, zo)
– Box #1
Size: 3×5×7
Location: (1, 1, 1)
Location: (1, 1, 1)
– Box #2
Size: 4×5×1
Location: (3, 4, 5)
– Box #3
Size: 1×1×1
Location: (4.5, 5.5, 6)
BoxPlot3(1, 1, 1, 3, 5, 7)
BoxPlot3(4, 6, 8, 4, 5, 1)
BoxPlot3(8, 11, 9, 1, 1, 1)
BoxPlot3(8, 11, 9, 1, 1, 1)
10
8
6
4
2
0
15
10
5
4
2
0
0
10
8
6
Matlab
9
Ejemplo: Onda senoidal sobre una
superficie de un cilindro
• Las coordenadas de una onda senoidal sobre la
superficie de un cilindro se obtiene con
x = b
cos( )
t
y = b
sin( )
t
z = c
z = c
cos(
cos(
at
at
)
)
Si se asume que a = 10.0, b = 1.0,
c = 0.3, y 0 ≤ t ≤ 2π, el script es
c = 0.3, y 0 ≤ t ≤ 2π, el script es
t = linspace(0, 2*pi, 200);
a = 10; b = 1.0; c = 0.3;
x = b*cos(t);
y = b*sin(t);
z = c*cos(a*t);
plot3(x, y, z, 'k')
axis equal
-0.2
0.2
0
0.5
0
-0.5
Matlab
0
-0.5
1
0.5
10
Superficies
• Matlab contiene un conjunto de funciones gráficas 3D
para crear superficies, contornos, y variaciones, así
como especializaciones de esas formas básicas
• Una superficie se define por la expresión
• Una superficie se define por la expresión
z = f x, y
(
)
donde x e y son las coordenadas en el plano-xy y z
es la altura resultante
Matlab
11
Superficies
• Las funciones básicas de graficación de superficies
son
surf(x, y, z) y mesh(x, y, z)
donde x, y, z son las coordenadas de los puntos en la
superficie
superficie
surf – dibuja una superficie compuesta de parches
de colores que dependen de la magnitud z
mesh – dibuja parches de superficies blancas que se
definen por su contorno. Los colores de las líneas de
los parches se determinan por la magnitud de z.
Matlab
12
Ejemplo de superficie
• Se requiere dibujar una superficie definida por
+ 6
definida en el rango −3 < x < 3 y −3 < y < 13
- 2 - 2 - 2
x y
(
z x, y
) =
+ 3
x
+
y
4
x
2
2
x
y
2
Se genera la función SurfExample para calcular las
Se genera la función SurfExample para calcular las
coordenadas x, y ,z
function [x, y, z] = SurfExample
x1 = linspace(-3, 3, 15); % (1×15)
y1 = linspace(-3, 13, 17); % (1×17)
[x, y] = meshgrid(x1, y1); % (17×15)
z = x.^4+3*x.^2−2*x+6-2*y.*x.^2+y.^2-2*y; % (17×15)
Matlab
13
Ejemplos de superficies con surf y mesh
[x,y,z] = SurfExample;
surf(x, y, z)
[x,y,z] = SurfExample;
mesh(x, y, z)
200
150
100
50
0
15
200
150
100
50
0
15
10
5
5
0
0
−2
−5
−4
4
2
2
10
5
0
0
-2
-5
-4
4
2
Matlab
14
Ejemplos de superficies con surf y mesh
[x,y,z] = SurfExample;
mesh(x, y, z)
hidden off
200
150
100
50
0
15
10
5
0
0
−2
−5
−4
4
2
Matlab
15
Combinando superficies y líneas
• Se puede combinar funciones de graficación 3D para
dibujar múltiples líneas y superficies
• Como ejemplo se crean dos funciones
Corners: que dibuja cuatro líneas conectando las
esquinas de la superficie generada por SurfExample
esquinas de la superficie generada por SurfExample
al plano xy que pasa por z = 0
Disc: que crea un disco circular que interseca la
superficie creada por SurfExample en zo = 80,con
radio de 10 unidades, y centro en (0,5)
Matlab
16
Ejemplo: combinando superficies y líneas
• Las coordenadas de las esquinas son:
200
(3, −3, z(3,−3))
(3, 13, z(3,13))
(−3, −3, z(−3,−3))
150
(−3, 13, z(−3,13))
(−3, 13, z(−3,13))
100
50
0
15
3
0
-2
5
0
2
1
10
Las funciones son:
function Corners
xc = [-3, -3, 3, 3];
yc = [-3, 13, 13, -3];
zc = xc.^4+3*xc.^2−2*xc+6−2*yc.*xc.^2+yc.^2−2*yc;
hold on
plot3([xc; xc], [yc; yc], [zeros(1,4); zc], 'k')
-1
-5
-3
Matlab
17
Ejemplo: combinando superficies y líneas
function Disc(R, zo)
r = linspace(0, R, 12); % (1×12)
theta = linspace(0, 2*pi, 50); % (1×50)
x = cos(theta')*r; % (50×12)
y = 5 + sin(theta')*r; % (50×12)
hold on
hold on
z = repmat(zo, size(x)); % (50×12)
surf(x, y, z)
81
80.5
80
79.5
79
15
10
5
0
0
-5
-5
-10
10
5
18
Matlab
Ejemplo: combinando superficies y líneas
[x, y, z] = SurfExample;
surf(x, y, z);
Disc(10, 80)
Corners
200
150
100
50
0
15
200
150
100
50
0
15
10
5
0
0
−2
−5
−4
4
2
10
5
0
Matlab
5
0
-5
-5
-10
10
19
Modificación de la apariencia de gráficos
• Hay varias funciones que se pueden usar de forma
combinada para modificar la apariencia de la
superficie resultante
box on o box off
grid on o grid off
axis on o axis off
La función box on sólo dibuja una caja si axis on ha
sido seleccionada
Matlab
20
Ejemplo: modificación de la apariencia de
[x,y,z] = SurfExample
mesh(x, y, z)
grid off
[x,y,z] = SurfExample
mesh(x, y, z)
axis off
grid off
gráficos
200
150
100
50
0
15
10
10
5
0
0
-5
-5
-10
10
10
5
Matlab
21
Ejemplo: modificación de la apariencia de
gráficos
[x,y,z] = SurfExample
mesh(x, y, z)
axis on
grid off
box on
box on
200
150
100
50
0
15
10
5
0
0
-5
-5
-10
10
5
Matlab
22
Modificación de la apariencia de gráficos
• Los colores de los parches creados por surf o las
líneas creadas por mesh se pueden cambiar a un
color uniforme usando
colormap(c)
donde c es un vector de tres elementos, cada uno de los
donde c es un vector de tres elementos, cada uno de los
cuales varía entre 0 y 1, correspondiendo a la intensidad
del color rojo, verde y azul respectivamente (r, g, b). Ejm:
c
[0 0 0]
[1 1 1]
[1 0 0]
[0 1 0]
[0 0 1]
[1 1 0]
[1 0 1]
[0 1 1]
[0.5 0.5 0.5]
Color
black
white
red
green
blue
yellow
magenta
cyan
gray
Matlab
23
Ejemplo: funciones adicionales para
mejorar visualmente una superficie
[x,y,z] = SurfExample;
meshz(x, y, z)
[x,y,z] = SurfExample;
waterfall(x, y, z)
200
150
100
50
0
15
200
150
100
50
0
15
10
5
0
0
-1
-5
-3
-2
3
2
1
1
10
5
0
0
-1
-5
-3
-2
3
2
1
Matlab
24
Ejemplo: funciones adicionales para
mejorar visualmente una superficie
[x,y,z] = SurfExample;
ribbon(y, z)
[x,y,z] = SurfExample;
surfnorm(x, y, z)
200
150
100
50
0
15
200
150
100
50
0
15
10
5
0
10
8
6
4
-5
0
2
16
14
12
10
5
0
1
0
-1
-2
-5
-4
-3
Matlab
4
3
2
25
Gráficos de contornos
• Las superficies también se pueden transformar en
gráficos de contornos, que son gráficos de curvas
formadas por la intersección de la superficie y un
plano paralelo al plano xy en valores específicos de z
• Las funciones
• Las funciones
surfc(x, y, z) y meshc(x, y, z)
crean superficies con contornos proyectados debajo
de la superficie. x, y, z son los valores de las
coordenadas de puntos que definen la superficie
Matlab
26
Ejemplo de gráficos de contornos
[x,y,z] = SurfExample;
meshc(x, y, z)
grid off
[x,y,z] = SurfExample;
surfc(x, y, z)
grid off
150
100
50
0
Comentarios de: Gráficos 3D en MATLAB (0)
No hay comentarios