SlideShare una empresa de Scribd logo
Gráficos 3D en MATLAB
Pedro Corcuera
Dpto. Matemática Aplicada y
Ciencias de la Computación
Universidad de Cantabria
corcuerp@unican.es
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
Matlab 2
interactivamente
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
Matlab 4
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
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:
• Así, plot3 es
  
 
1 2
1 2
j j j jnx = x x … x
y = y y … y j = ,
Matlab 5
• Así, plot3 es
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)
  
  
1 2
2
1 2
1
j j j jn
j j1 j jn
y = y y … y j = ,
z = z z …z
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
Matlab 6
text(x, y, z, s)
donde s es un string y
zlabel
se usa para etiquetar el eje z
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 )
Matlab 7
caras opuestas P(xo,yo,zo) and P(xo+Lx, yo+Ly, zo+Lz)
(xo,yo,zo)
(xo,yo,zo+Lz)
(xo+Lx,yo,zo)
(xo+Lx,yo,zo+Lz)
(xo+Lx,yo+Ly,zo)
Ly
Lx
Lz
5
6 7
8
1
2 3
4
(xo,yo+Ly,zo)
(xo,yo+Ly,zo+Lz)
(xo+Lx,yo+Ly,zo+Lz)
x
y
z
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];
(xo,yo,zo+Lz)
Lz
2 3
z
(xo,yo+Ly,zo+Lz)
z
Matlab 8
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
plot3(x(index(k,:)), y(index(k,:)), z(index(k,:)))
hold on
end
(xo,yo,zo)
(xo+Lx,yo,zo)
(xo+Lx,yo,zo+Lz)
(xo+Lx,yo+Ly,zo)
Ly
Lx
5
6 7
8
1 4
y
(xo,yo+Ly,zo)
(xo+Lx,yo+Ly,zo+Lz)
x
y
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)
BoxPlot3(1, 1, 1, 3, 5, 7)
BoxPlot3(4, 6, 8, 4, 5, 1)
BoxPlot3(8, 11, 9, 1, 1, 1)
Matlab 9
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(8, 11, 9, 1, 1, 1)
0
2
4
6
8
10
0
5
10
15
0
2
4
6
8
10
Ejemplo: Onda senoidal sobre una
superficie de un cilindro
• Las coordenadas de una onda senoidal sobre la
superficie de un cilindro se obtiene con
cos( )
sin( )
cos( )
x = b t
y = b t
z = c at
Si se asume que a = 10.0, b = 1.0,
c = 0.3, y 0 ≤ t ≤ 2π, el script es
Matlab 10
cos( )z = c at
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
c = 0.3, y 0 ≤ t ≤ 2π, el script es
-0.5
0
0.5
1
-0.5
0
0.5
-0.2
0
0.2
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
Matlab 11
• Una superficie se define por la expresión
donde x e y son las coordenadas en el plano-xy y z
es la altura resultante
( )z = f x, y
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
Matlab 12
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.
Ejemplo de superficie
• Se requiere dibujar una superficie definida por
definida en el rango −3 < x < 3 y −3 < y < 13
Se genera la función SurfExample para calcular las
4 2 2 2
( ) = + 3 + - 2 - 2 - 2 + 6z x, y x x y x y x y
Matlab 13
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)
Ejemplos de superficies con surf y mesh
[x,y,z] = SurfExample;
surf(x, y, z)
2
4
5
10
15
0
50
100
150
200
Matlab 14
[x,y,z] = SurfExample;
mesh(x, y, z)
−4
−2
0
2
−5
0
5
-4
-2
0
2
4
-5
0
5
10
15
0
50
100
150
200
Ejemplos de superficies con surf y mesh
[x,y,z] = SurfExample;
mesh(x, y, z)
hidden off
50
100
150
200
Matlab 15
−4
−2
0
2
4
−5
0
5
10
15
0
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
Matlab 16
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)
Ejemplo: combinando superficies y líneas
• Las coordenadas de las esquinas son:
50
100
150
200
(−3, −3, z(−3,−3))
(−3, 13, z(−3,13))
(3, 13, z(3,13))(3, −3, z(3,−3))
Matlab 17
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')
-3
-2
-1
0
1
2
3
-5
0
5
10
15
0
(−3, 13, z(−3,13))
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
Matlab 18
hold on
z = repmat(zo, size(x)); % (50×12)
surf(x, y, z)
-10
-5
0
5
10
-5
0
5
10
15
79
79.5
80
80.5
81
Ejemplo: combinando superficies y líneas
[x, y, z] = SurfExample;
surf(x, y, z);
Disc(10, 80)
Corners
150
200
Matlab 19
-10
-5
0
5
10
-5
0
5
10
15
0
50
100
−4
−2
0
2
4
−5
0
5
10
15
0
50
100
150
200
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
Matlab 20
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
Ejemplo: modificación de la apariencia de
gráficos
[x,y,z] = SurfExample
mesh(x, y, z)
grid off
1010
15
0
50
100
150
200
Matlab 21
[x,y,z] = SurfExample
mesh(x, y, z)
axis off
grid off
-10
-5
0
5
10
-5
0
5
10
Ejemplo: modificación de la apariencia de
gráficos
[x,y,z] = SurfExample
mesh(x, y, z)
axis on
grid off
box on
50
100
150
200
Matlab 22
box on
-10
-5
0
5
10
-5
0
5
10
15
0
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
Matlab 23
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 Color
[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]
black
white
red
green
blue
yellow
magenta
cyan
gray
Ejemplo: funciones adicionales para
mejorar visualmente una superficie
[x,y,z] = SurfExample;
meshz(x, y, z)
1
2
3
5
10
15
0
50
100
150
200
Matlab 24
[x,y,z] = SurfExample;
waterfall(x, y, z)
-3
-2
-1
0
1
-5
0
-3
-2
-1
0
1
2
3
-5
0
5
10
15
0
50
100
150
200
Ejemplo: funciones adicionales para
mejorar visualmente una superficie
[x,y,z] = SurfExample;
ribbon(y, z)
[x,y,z] = SurfExample;
surfnorm(x, y, z)
Matlab 25
0
2
4
6
8
10
12
14
16
-5
0
5
10
15
0
50
100
150
200
-4
-3
-2
-1
0
1
2
3
4
-5
0
5
10
15
0
50
100
150
200
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
Matlab 26
• 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
Ejemplo de gráficos de contornos
[x,y,z] = SurfExample;
meshc(x, y, z)
grid off
0
1
2
5
10
15
0
50
100
150
Matlab 27
[x,y,z] = SurfExample;
surfc(x, y, z)
grid off
-3
-2
-1
0
-5
0
-3
-2
-1
0
1
2
-5
0
5
10
15
0
50
100
150
200
Gráficos de contornos
• Se pueden crear contornos sin visualizar la superficie,
con etiquetas o sin etiquetas
• La función
contour(x, y, z, v)
Matlab 28
crea un gráfico de contorno donde
x, y, z son las coordenadas de los puntos que definen la
superficie
v, si es un escalar, es el número de niveles de contornos a
visualizar y, si es un vector de valores, los contornos de la
superficie en los valores de z. El uso de v es opcional
Gráficos de contornos
• Si se quiere etiquetar el contorno se usan las
funciones
[C, h] = contour(x, y, z, v)
clabel(C, h, v)
Matlab 29
clabel
Ejemplos de contour
[x,y,z] = SurfExample;
contour(x, y, z)
0
2
4
6
8
10
12
Matlab 30
[x,y,z] = SurfExample;
contour(x, y, z, 4)
-3 -2 -1 0 1 2 3
-2
-3 -2 -1 0 1 2 3
-2
0
2
4
6
8
10
12
Ejemplos de contour y clabel
[x,y,z] = SurfExample;
[C, h] = contour(x, y, z);
clabel(C, h)
20
20
20
20
20
20
20
20
40
40
40
40
40
40
40
60
60
60
60
80
80
80
80
100
100 100
100
120
120 120140
0
2
4
6
8
10
12
Matlab 31
[x,y,z] = SurfExample;
v= [10, 30:30:120];
[C, h] = contour(x, y, z, v);
clabel(C, h, v)
20
40
60
60
80
100
100
120
120
140
140
160
-3 -2 -1 0 1 2 3
-2
10
10
10
10
10
10
30
30 30
30
30
30
30
30
60
60
60
60
60
60
90
90
90
90
120
120 120
120
-3 -2 -1 0 1 2 3
-2
0
2
4
6
8
10
12
Gráficos de contornos 3D
• Para obtener los contornos de superficies en 3D, se
usa
contour3(x, y, z, v)
donde
x, y, z son las coordenadas de los puntos de la superficie
Matlab 32
x, y, z son las coordenadas de los puntos de la superficie
v, si es un escalar, es el número de niveles de contornos a
visualizar y, si es un vector de valores, los contornos de la
superficie en los valores de z. El uso de v es opcional
Para etiquetar los contornos se usa
[C, h] = contour3(x, y, z, v)
clabel(C, h, v)
Gráficos de contornos 3D
• Para rellenar la region entre contornos 2D con
diferentes colores se usa
contourf(x, y, z, v)
los valores de los colores se pueden identificar
usando
Matlab 33
usando
colorbar(s)
que coloca una barra de colores y sus correspondientes
valores numéricos adyacente a la figura
La cantidad z es un string igual a 'horiz' o 'vert' para indicar
la orientación de la barra. El valor por defecto es 'vert'
Ejemplos de contour3, contourf y colorbar
[x,y,z] = SurfExample;
[C, h] = contour3(x, y, z);
clabel(C, h)
2
3
10
20
40
60
80
100
120
140
160
180
20
20
2020
20
20
20
40
40
40
40
40
40
40
40
60
60
60
60
60
60
80
80
80
80
80
100
100
100
100
120
120
120
120
140
140
140
160
50
100
150
200
Matlab 34
[x,y,z] = SurfExample;
[C, h] = contourf(x, y, z);
colorbar
-3 -2 -1 0 1 2 3
-2
0
2
4
6
8
10
12
-3
-2
-1
0
1
2
0
5
20
20
20
40
-3 -2 -1 0 1 2 3
-2
0
2
4
6
8
10
12
20
40
60
80
100
120
140
160
180−4
−2
0
2
4
−5
0
5
10
15
0
Gráficos de contornos 3D
• Las propiedades de las líneas y etiquetas se pueden
modificar de forma similar que para plot
• Por ejemplo, para cambiar el tamaño de las etiquetas
creadas con contour a 14 puntos y las líneas del
contorno azules, se siguen los pasos
Matlab 35
contorno azules, se siguen los pasos
[x, y, z] = SurfExample;
[C, h] = contour(x, y, z, v)
g = clabel(C, h, v);
set(g, 'Fontsize', 14)
set(h, 'LineColor', ‘b')
10
10
10
10
10
10
30
30 30
30
30
30
30
30
60
60
60
60
60
60
90
90
90
90
120
120 120
120
-3 -2 -1 0 1 2 3
-2
0
2
4
6
8
10
12
Superficies cilíndricas, esféricas y
elipsoidales
• Se puede usar una curva 2D como generador para
crear superficies de revolución usando
[x, y, z] = cylinder(r, n)
que retorna las coordenadas x, y, z de una superficie
Matlab 36
que retorna las coordenadas x, y, z de una superficie
cilíndrica utilizandoel vector r para definir una curva perfil
La función cylinder trata cada elemento en r como un
radio en n puntos equiespaciados alrededeor de su
circunferencia. Si se omite n se considera el valor 20
Ejemplo de superficie cilíndrica
• Para la curva
que se rota 360° alrededor del eje-z
Se usa 26 intervalos equiespaciados en la dirección z
y 16 intervalor equiespaciados en la dirección
≥ ≤= 1.1+sin( ) 0 2r z z π
Matlab 37
y 16 intervalor equiespaciados en la dirección
circunferencial
• El script para graficar la superficie cilíndrica es
zz = linspace(0, 2*pi, 26);
[x, y, z] = cylinder(1.1+sin(zz), 16);
surf(x, y, z)
axis off
Ejemplo de superficie cilíndrica
Matlab 38
Axis of rotation
Superficies cilíndricas, esféricas y
elipsoidales
• Para crear una esfera, se puede usar
[x, y, z] = sphere(n);
axis equal
surf(x, y, z)
donde n es el número de n x n elementos que
Matlab 39
donde n es el número de n x n elementos que
comprende la esfera de radio 1 centrado en el origen.
Si n se omite se toma n = 20
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
Superficies cilíndricas, esféricas y
elipsoidales
• Para crear una elipsoide, se puede usar
[x, y, z] = ellipsoid(xc, yc, zc, xr, yr, zr, n);
axis equal
surf(x, y, z) -1
0
1
Matlab 40
surf(x, y, z)
en (xc, yc, zc) con longitud de semi-ejes en las
direcciones x, y, z respectivamente, de xr, yr, y zr . n
es el número de n x n elementos que comprende el
elipsoide. Si n se omite se toma n = 20
-1
0
1
-3
-2
-1
0
1
2
3
Angulo de visión
• En ocasiones se desea cambiar el ángulo de vista por
defecto de los gráficos 3D porque
– No se muestra las características de interés
– Varias vistas diferentes deben mostrarse usando subplot
– La exploración de la superficie desde varias vistas es
Matlab 41
– La exploración de la superficie desde varias vistas es
deseable antes de decidir la orientación final
• Para determinar el azimuth (a) y ángulo de elevación
de la vista (e), se usa
[a, e] = view
Angulo de visión
• Para orientar el objeto se usa el icono Rotate 3D en
la ventana de la figura y se orienta el objeto hasta
obtener una orientación satisfactoria. Se mostrará los
valores de azimuth y elevación mientras se rota
Matlab 42
• Esos valores se pueden ingresar en la expresión
view(an, en)
para crear la orientación deseada cuando se ejecuta
un script
Rotate 3D
Sombreado (shading)
• Las superficies creadas con surf usan la propiedad de
sombreado por defecto llamada 'faceted'.
• La función que cambia el sombreado es
shading s
Matlab 43
donde s es un string igual a
faceted % Default
flat
interp
Ejemplo de view y shading
zz = linspace(0, 2*pi, 26);
r=1.1+sin(zz);
[x, y, z] = cylinder(r, 16);
surf(x, y, z)
Matlab 44
surf(x, y, z)
view(-88.5, -48)
shading faceted
axis off vis3d
Ejemplo de view y shading
zz = linspace(0, 2*pi, 26);
r=1.1+sin(zz);
[x, y, z] = cylinder(r, 16);
surf(x, y, z)
Matlab 45
surf(x, y, z)
view(-88.5, -48)
shading flat
axis off vis3d
Ejemplo de view y shading
zz = linspace(0, 2*pi, 26);
r=1.1+sin(zz);
[x, y, z] = cylinder(r, 16);
surf(x, y, z)
Matlab 46
surf(x, y, z)
view(-88.5, -48)
shading interp
axis off vis3d
Ejemplo de view y shading
r = 1+sin(zz);
[x, y, z] = cylinder(r, 16);
surf(x, y, z)
view(-88.5, -48)
Matlab 47
view(-88.5, -48)
shading interp
colormap(copper)
axis off vis3d
Transparencia
• Las superficies creadas con surf puede tener su
opacidad alterada asignando un valor numérico al
keyword 'FaceAlpha'
• El efecto de este keyword en la superficie resultante
es dependiente del tipo del sombreado seleccionado
Matlab 48
es dependiente del tipo del sombreado seleccionado
• Para ilustrar la opción de transparencia, se crea una
función que genera los valores numéricos para la
superficie dada por cos (1 cos )
sin (1 cos )
(1 sin )
v
v
v
x a v u
y a v u
z ba u
= +
= − +
= − +
Transparencia
• Si se asume que a = 1.13 y b = 1.14, la función
fichero m para esta superficie es
function [x, y, z] = Transparency
a = 1.13; b = 1.14;
uu = linspace(0, 2*pi, 30);
Matlab 49
uu = linspace(0, 2*pi, 30);
vv = linspace(-15, 6, 45);
[u, v] = meshgrid(uu, vv);
x = a.^v.*cos(v).*(1+cos(u));
y = -a.^v.*sin(v).*(1+cos(u));
z = -b*a.^v.*(1+sin(u));
Ejemplo de transparencia
[x, y, z] = Transparency;
surf(x, y, z)
shading interp
axis vis3d off
equal
view([-35 38])
Matlab 50
view([-35 38])
[x, y, z] = Transparency;
h = surf(x, y, z)
set(h, 'FaceAlpha', 0.4)
shading interp
axis vis3d off equal
view([-35 38])
Ejemplo de transparencia
[x, y, z] = Transparency;
h = surf(x, y, z)
set(h, 'FaceAlpha', 0.4)
axis vis3d off equal
view([-35 38])
Matlab 51
view([-35 38])
Nota: se omite shading
Ejemplo: coloreado de cajas
• Modificación de fichero m BoxPlot3 para que las seis
superficies representadas por los rectángulos se
rellene con un color diferente
• La modificación se consigue usando fill3
Matlab 52
• La versión revisada de BoxPlot3 renombrada como
BoxPlot3C es
Ejemplo: coloreado de cajas
function BoxPlot3C(xo, yo, zo, Lx, Ly, Lz, w)
% w = 0, wire frame; w = 1, rectangles are colored
x = [xo xo xo xo xo+Lx xo+Lx xo+Lx xo+Lx];
y = [yo yo yo+Ly yo+Ly yo yo yo+Ly yo+Ly];
z = [zo zo+Lz zo+Lz zo zo zo+Lz zo+Lz zo ];
index = zeros(6,5);
index(1,:) = [1 2 3 4 1];
index(2,:) = [5 6 7 8 5];
index(3,:) = [1 2 6 5 1];
Matlab 53
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];
c = 'rgbcmy';
for k = 1:6
if w~=0
fill3(x(index(k,:)), y(index(k,:)), z(index(k,:)), c(k))
else
plot3(x(index(k,:)), y(index(k,:)), z(index(k,:)))
end
hold on
end
Ejemplo: coloreado de cajas
9
10
BoxPlot3C(1, 1, 1, 3, 5, 7, 1)
BoxPlot3C(4, 6, 8, 4, 5, 1, 0)
BoxPlot3C(8, 11, 9, 1, 1, 1, 1)
Matlab 54
1
2
3
4
5
6
7
8
9
0
2
4
6
8
10
12
1
2
3
4
5
6
7
8
9
Ejemplo: intersección de un cilindro y una
esfera y resaltado de su intersección
• La curva que resulta de la intersección de una esfera
de radio 2a centrada en el origen y un cilindro circular
de radio a centrado en (a, 0) es dado por las
ecuaciones paramétricas (1 cos )
sin
x a
y a
ϕ
ϕ
= +
=
Matlab 55
donde 0 ≤ ϕ ≤ 4π
• Para crear una esfera de radio 2a, se multiplica cada
coordenada de sphere por 2a.
sin
2 sin( / 2)
y a
z a
ϕ
ϕ
=
=
Ejemplo: intersección de un cilindro y una
esfera y resaltado de su intersección
• Las coordenadas de cylinder se modifican con
la transformación:
x → ax + a
y → ay
z → 4az − 2a
Matlab 56
z → 4az − 2a
• Se asume que a = 1. El script es
Ejemplo: intersección de un cilindro y una
esfera y resaltado de su intersección
a = 1;
[xs, ys, zs] = sphere(30);
surf(2*a*xs, 2*a*ys, 2*a*zs)
hold on
[x, y, z] = cylinder;
surf(a*x+a, a*y, 4*a*z-2*a)
Matlab 57
surf(a*x+a, a*y, 4*a*z-2*a)
shading interp
t = linspace(0, 4*pi, 100);
x = a*(1+cos(t));
y = a*sin(t);
z = 2*a*sin(t/2);
plot3(x, y, z, 'y-', 'Linewidth', 2.5);
axis equal off
view([45, 30])
Ejemplo: mejora de gráficos 2D con
objetos 3D
• Para una esfera de radio a y un elipsoide con su eje
mayor en la dirección x igual a 2a, eje menor en la
dirección y igual a 2b, y un eje menor en la dirección
z igual a 2c, la proporción del volumen de un
elipsoide con relación al volumen de una esfera es
Matlab 58
elipsoide con relación al volumen de una esfera es
• Se crea el siguiente programa para mejorar la
comprensión de un gráfico de V como función de b/a
para varios valores de c/a
ellipse
sphere
V b c
V
V a a
  
= =   
  
Ejemplo: mejora de gráficos 2D con
objetos 3D
b = [0.5, 1]; c = b;
for k = 1:2
plot(b, b*c(k), 'k-')
text(0.75, (b(1)*c(k)+b(2)*c(k))/2-0.02, ['c/a = ' num2str(c(k))])
hold on
end
xlabel('b/a') ylabel('V')
for k = 1:4
k
Matlab 59
switch k
case 1
axes('position', [0.12, 0.2, 0.2, 0.2])
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(1), c(1), 20);
mesh(xs, ys, zs)
text(0, 0, 1, ['b/a = ' num2str(b(1)) ' c/a = ' num2str(c(1))])
case 2
axes ('position', [0.1, 0.5, 0.2, 0.2])
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(1), c(2), 20);
mesh (xs, ys, zs)
text (0, 0, 1.5, ['b/a = ' num2str(b(1)) ' c/a = ' num2str(c(2))])
Ejemplo: mejora de gráficos 2D con
objetos 3D
case 3
axes ('position', [0.7, 0.65, 0.2, 0.2])
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(2), c(2), 20);
mesh (xs, ys, zs)
text (-1.5, 0, 2, ['b/a = ' num2str(b(2)) ' c/a = ' num2str(c(2))])
case 4
axes ('position', [0.7, 0.38, 0.2, 0.2])
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(2), c(1), 20);
Matlab 60
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(2), c(1), 20);
mesh (xs, ys, zs)
text (-1.5, 0, 1.5, ['b/a = ' num2str(b(2)) ' c/a = ' num2str(c(1))])
end
colormap([0 0 0])
axis equal off
end
Ejemplo: mejora de gráficos 2D con
objetos 3D
0.7
0.8
0.9
1
c/a = 1
b/a = 0.5 c/a = 1
b/a = 1 c/a = 1
Matlab 61
0.5 0.6 0.7 0.8 0.9 1
0.2
0.3
0.4
0.5
0.6
c/a = 0.5
b/a
V
b/a = 0.5 c/a = 0.5
b/a = 1 c/a = 0.5
Rotación y traslación de objetos 3D:
ángulos de Euler
• La rotación y traslación de un punto p(x,y,z) a otra
posición P(X,Y,Z) es determinado por
11 12 13
21 22 23
21 22 23
x
y
z
X = L + a x + a y + a z
Y = L + a x + a y + a z
Z = L + a x + a y + a z
Matlab 62
donde Lx, Ly, y Lz son los componentes x, y, z de la
traslación, respectivamente, y aij, i, j = 1, 2, 3, son los
elementos de
21 22 23zZ = L + a x + a y + a z
 
 
 
  
cos cos -cos sin sin
= cos sin + sin sin cos cos cos - sin sinψsin -sin cos
sin sin - cos sin cos sin cos + cos sinψsin cos cos
ψ χ ψ χ ψ
a φ χ φ ψ χ φ χ φ χ φ ψ
φ χ φ ψ χ φ χ φ χ φ ψ
Rotación y traslación de objetos 3D:
ángulos de Euler
• Las cantidades φ, ψ, y χ son los ángulos de rotación
ordenados (ángulos de Euler) del sistema de
coordenadas alrededor del origen
φ alrededor del eje x
ψ alrededor del eje y
Matlab 63
ψ alrededor del eje y
χ alrededor del eje z
• En general, (x,y,z) pueden ser escalares, vectores de
la misma longitud, o matrices del mismo orden
• Se crea la función EulerAngles
Rotación y traslación de objetos 3D:
ángulos de Euler
function [Xrt, Yrt, Zrt] = EulerAngles(psi, chi, phi, Lx, Ly, Lz, x, y, z)
a = [cos(psi)*cos(chi), -cos(psi)*sin(chi), sin(psi); …
cos(phi)*sin(chi)+sin(phi)*sin(psi)*cos(chi), …
cos(phi)*cos(chi)-sin(phi)*sin(psi)*sin(chi), …
-sin(phi)*cos(psi); …
sin(phi)*sin(chi)-cos(phi)*sin(psi)*cos(chi), …
Matlab 64
sin(phi)*sin(chi)-cos(phi)*sin(psi)*cos(chi), …
sin(phi)*cos(chi)+cos(phi)*sin(psi)*sin(chi), …
cos(phi)*cos(psi)];
Xrt = a(1,1)*x+a(1,2)*y+a(1,3)*z+Lx;
Yrt = a(2,1)*x+a(2,2)*y+a(2,3)*z+Ly;
Zrt = a(3,1)*x+a(3,2)*y+a(3,3)*z+Lz;
11 12 13
21 22 23
21 22 23
x
y
z
X =L +a x+a y+a z
Y =L +a x+a y+a z
Z=L +a x+a y+a z
Rotación y traslación de objetos 3D:
generación de Toro
• Las ecuaciones para generar un toro son
( )
2
2 2 2
cos
sin
x = r θ
y = r θ
z = ± a - x + y - b
Torus
Matlab 65
donde b − a ≤ r ≤ b + a, 0 ≤ θ ≤ 2π, y b > a
Se crea la función Torus para obtener las
coordenadas del toro que usa las función real para
eliminar la parte imaginaria debida a redondeos
numéricos
( )
Rotación y traslación de objetos 3D:
generación de Toro
function [X, Y, Z] = Torus(a, b)
r = linspace(b-a, b+a, 10);
th = linspace(0, 2*pi, 22);
x = r'*cos(th);
y = r'*sin(th);
Matlab 66
sin
z = real(sqrt(a^2-(sqrt(x.^2+y.^2)-b).^2));
X = [x x];
Y = [y y];
Z = [z -z];
Rotación y traslación de objetos 3D:
generación de Toro
• Se obtendrá cuatro gráficas del toro:
– Sin rotación
– Rotado 60° alrededor del eje x (φ = 60°) y comparado
con el toro original
– Rotado 60° alrededor del eje y (ψ = 60°) y comparado
Matlab 67
– Rotado 60° alrededor del eje y (ψ = 60°) y comparado
con el toro original
– Rotado 60° alrededor del eje x (φ = 60°), rotado 60°
alrededor del eje y (ψ = 60°) y comparado con el toro
original
• Se asume que a = 0.2 y b = 0.8 y se usa
colormap para producir una malla de líneas
Rotación y traslación de objetos 3D:
generación de Toro
[X, Y, Z] = Torus(0.2, 0.8);
psi = [0, pi/3, pi/3]; chi = [0, 0, 0]; phi = [pi/3,0, pi/3];
Lx = 0; Ly = 0; Lz = 0;
for k = 1:4
subplot(2,2,k)
if k==1
Matlab 68
if k==1
mesh(X, Y, Z)
else
mesh(X, Y, Z)
hold on
[Xr Yr Zr] = EulerAngles(psi(k-1), chi(k-1), …
phi(k-1), Lx, Ly, Lz, X, Y, Z);
mesh(Xr, Yr, Zr)
end
Rotación y traslación de objetos 3D:
generación de Toro
switch k
case 1
text(0.5, -0.5, 1, 'Torus')
case 2
text(0.5, -0.5, 1,'phi = 60circ')
case 3
text(0.5,-0.5,1,'psi = 60circ')
Matlab 69
text(0.5,-0.5,1,'psi = 60circ')
case 4
text(0.5, -0.5, 1.35,'psi = 60circ')
text(0.55, -0.5, 1,'phi = 60circ')
end
colormap([0 0 0])
axis equal off
grid off
end
Rotación y traslación de objetos 3D:
generación de Toro
Torus
φ = 60°
Matlab 70
ψ = 60° φ = 60°
ψ = 60°
Creación de gráficos interactivamente
• El entorno Matlab permite crear gráficas
interactivamente de varias maneras
Seleccionar variable(s)
+ botón derecho
Matlab 71
Seleccionar tipo de gráfico
Creación de gráficos interactivamente
• Se introducen los siguientes comandos:
>> N=50;
>> y=randn(N,1);
>> y2=filter([1 1]/2,1,y);
• Se pulsa sobre la variable y en el Workspace y se
Matlab 72
• Se pulsa sobre la variable y en el Workspace y se
pulsa sobre el icono . Se obtiene el gráfico
0 5 10 15 20 25 30 35 40 45 50
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
Creación de gráficos interactivamente
• Se puede modificar el tipo de gráfico desplegando el
menú para obtener la descripción
Matlab 73
Más ayuda
Creación de gráficos interactivamente
• Cuando se selecciona un tipo de gráfico se genera el
comando correspondiente en la ventana de
comandos
Matlab 74
Creación de gráficos interactivamente
• En la ventana de figura se puede modificar el gráfico,
generar el código y guardarlo para ser invocado
Matlab 75

Más contenido relacionado

PDF
CALCULO VECTORIAL Guia unidad1 cv-p44
DOC
Perfil_longitudinal_y_transversal.doc
PPTX
PRODUCTO INTERNO Vectores Ortogonales
PPS
Vista Auxiliares Sucesivas
PDF
Coordenadas cilindricas y esfericas
PPTX
Metodo de la bisección
PPT
sISTEMAS DE COORDENADAS
CALCULO VECTORIAL Guia unidad1 cv-p44
Perfil_longitudinal_y_transversal.doc
PRODUCTO INTERNO Vectores Ortogonales
Vista Auxiliares Sucesivas
Coordenadas cilindricas y esfericas
Metodo de la bisección
sISTEMAS DE COORDENADAS

La actualidad más candente (20)

PDF
Ejercicios resueltos(f.vectoriales)(1)
PPTX
Tema 2.4
PPS
serie de taylor
PPTX
Graficas en coordenadas polares
PPTX
Metodo de Gauss y de Gauss-Jordan
PDF
Regresion aplicada a la ingenieria
PDF
Aplicacion de la integral
PDF
Ley de triangulo
DOCX
Trabajo de coordenadas polares
PPTX
Vector unitario tema 03
PPTX
Ejemplos
DOCX
Aplicación de la metodologia de sistemas blandos a la pobreza en el distrito ...
PDF
Proyecciones y vistas de un objeto
DOCX
Laboratorio de Movimiento Armonico Amortiguado
PPTX
Variacion De Parametros
DOC
Informe topografia poligonacion
PDF
Oscilaciones.pdf
PPTX
Movimiento rectilinio Uniforme
PPTX
Metodo gauss y gauss jordan
PDF
MOVIMIENTO CIRCULAR - GRAVITACIÓN: fuerza centrípeta y satélites
Ejercicios resueltos(f.vectoriales)(1)
Tema 2.4
serie de taylor
Graficas en coordenadas polares
Metodo de Gauss y de Gauss-Jordan
Regresion aplicada a la ingenieria
Aplicacion de la integral
Ley de triangulo
Trabajo de coordenadas polares
Vector unitario tema 03
Ejemplos
Aplicación de la metodologia de sistemas blandos a la pobreza en el distrito ...
Proyecciones y vistas de un objeto
Laboratorio de Movimiento Armonico Amortiguado
Variacion De Parametros
Informe topografia poligonacion
Oscilaciones.pdf
Movimiento rectilinio Uniforme
Metodo gauss y gauss jordan
MOVIMIENTO CIRCULAR - GRAVITACIÓN: fuerza centrípeta y satélites
Publicidad

Destacado (20)

PPTX
All About MATLAB
PPT
Matlab Overviiew
DOC
MATLAB SIMULATIONS OF PARALLEL RESONANT CIRCUIT
PPT
Matlab tme series benni
PDF
MATLAB Assignment Help
PDF
Arte del dibujo
PDF
DSP_FOEHU - Lec 02 - Frequency Domain Analysis of Signals and Systems
PDF
Circuit analysis i with matlab computing and simulink sim powersystems modeling
PPSX
Matlab basic and image
PDF
Libro de MATLAB
PDF
DSP_FOEHU - MATLAB 03 - The z-Transform
PDF
Advanced MATLAB Tutorial for Engineers & Scientists
PPTX
Matlab for Electrical Engineers
PDF
Basics of Image Processing using MATLAB
PDF
Introduction to Matlab
PPTX
Matlab Introduction
PPTX
Getting started with image processing using Matlab
PDF
DSP_FOEHU - MATLAB 02 - The Discrete-time Fourier Analysis
PDF
DSP_FOEHU - MATLAB 01 - Discrete Time Signals and Systems
PPT
La Composicion
All About MATLAB
Matlab Overviiew
MATLAB SIMULATIONS OF PARALLEL RESONANT CIRCUIT
Matlab tme series benni
MATLAB Assignment Help
Arte del dibujo
DSP_FOEHU - Lec 02 - Frequency Domain Analysis of Signals and Systems
Circuit analysis i with matlab computing and simulink sim powersystems modeling
Matlab basic and image
Libro de MATLAB
DSP_FOEHU - MATLAB 03 - The z-Transform
Advanced MATLAB Tutorial for Engineers & Scientists
Matlab for Electrical Engineers
Basics of Image Processing using MATLAB
Introduction to Matlab
Matlab Introduction
Getting started with image processing using Matlab
DSP_FOEHU - MATLAB 02 - The Discrete-time Fourier Analysis
DSP_FOEHU - MATLAB 01 - Discrete Time Signals and Systems
La Composicion
Publicidad

Similar a Matlab graficos3 d (20)

PPTX
Matlab graficas
PPTX
Matlab graficas en 2 d y 3d
PPTX
Graficas en matlab juan villacis 2 do b
PPTX
Graficas en matlab juan villacis 2 do b
PPTX
Graficas en matlab juan villacis 2 do b
PPTX
Graficas en matlab 2 d y 3d
PPTX
Clase 3 (1)
PPTX
Graficas 2D y 3D
PPT
Graficas en 2 d y 3d matlab
PPTX
Gráficas en matlab
PPTX
Deber graficas en matlab
PPTX
Deber graficas en matlab
PPTX
Graficas en matlab
PPTX
Gráficas en Matlab
PPTX
Graficas en matlab
PPTX
Gráficas en Matlab
PDF
practica 6.pdf
PPTX
PPTX
gráficas 2D y 3D (José Ponce)
PDF
Matlab graficas
Matlab graficas en 2 d y 3d
Graficas en matlab juan villacis 2 do b
Graficas en matlab juan villacis 2 do b
Graficas en matlab juan villacis 2 do b
Graficas en matlab 2 d y 3d
Clase 3 (1)
Graficas 2D y 3D
Graficas en 2 d y 3d matlab
Gráficas en matlab
Deber graficas en matlab
Deber graficas en matlab
Graficas en matlab
Gráficas en Matlab
Graficas en matlab
Gráficas en Matlab
practica 6.pdf
gráficas 2D y 3D (José Ponce)

Último (20)

PPT
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
PPTX
NILS actividad 4 PRESENTACION.pptx pppppp
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PDF
FIJA NUEVO TEXTO DE LA ORDENANZA GENERAL DE LA LEY GENERAL DE URBANISMO Y CON...
PPTX
clase MICROCONTROLADORES ago-dic 2019.pptx
PDF
1132-2018 espectrofotometro uv visible.pdf
PDF
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
PDF
TESTAMENTO DE DESCRIPTIVA ..............
PPTX
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
PPTX
Cortinas-en-Presas-de-Gravedad-Vertedoras-y-No-Vertedoras.pptx
PDF
prg2_t01_p01_Fundamentos POO - parte1.pdf
DOC
informacion acerca de la crianza tecnificada de cerdos
PDF
manual-electricidad-automotriz-sistemas-electricos-bateria-alumbrado-iluminac...
PDF
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
PPT
Sustancias Peligrosas de empresas para su correcto manejo
PPT
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
PDF
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
PPT
357161027-seguridad-industrial-diapositivas-ppt.ppt
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
PDF
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
NILS actividad 4 PRESENTACION.pptx pppppp
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
FIJA NUEVO TEXTO DE LA ORDENANZA GENERAL DE LA LEY GENERAL DE URBANISMO Y CON...
clase MICROCONTROLADORES ago-dic 2019.pptx
1132-2018 espectrofotometro uv visible.pdf
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
TESTAMENTO DE DESCRIPTIVA ..............
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
Cortinas-en-Presas-de-Gravedad-Vertedoras-y-No-Vertedoras.pptx
prg2_t01_p01_Fundamentos POO - parte1.pdf
informacion acerca de la crianza tecnificada de cerdos
manual-electricidad-automotriz-sistemas-electricos-bateria-alumbrado-iluminac...
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
Sustancias Peligrosas de empresas para su correcto manejo
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
357161027-seguridad-industrial-diapositivas-ppt.ppt
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES

Matlab graficos3 d

  • 1. Gráficos 3D en MATLAB Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es
  • 2. 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 Matlab 2 interactivamente
  • 3. Indice • Líneas en 3D • Superficies • Creación de gráficos interactivamente Matlab 3
  • 4. 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 Matlab 4 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
  • 5. 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: • Así, plot3 es      1 2 1 2 j j j jnx = x x … x y = y y … y j = , Matlab 5 • Así, plot3 es 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)       1 2 2 1 2 1 j j j jn j j1 j jn y = y y … y j = , z = z z …z
  • 6. 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 Matlab 6 text(x, y, z, s) donde s es un string y zlabel se usa para etiquetar el eje z
  • 7. 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 ) Matlab 7 caras opuestas P(xo,yo,zo) and P(xo+Lx, yo+Ly, zo+Lz) (xo,yo,zo) (xo,yo,zo+Lz) (xo+Lx,yo,zo) (xo+Lx,yo,zo+Lz) (xo+Lx,yo+Ly,zo) Ly Lx Lz 5 6 7 8 1 2 3 4 (xo,yo+Ly,zo) (xo,yo+Ly,zo+Lz) (xo+Lx,yo+Ly,zo+Lz) x y z
  • 8. 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]; (xo,yo,zo+Lz) Lz 2 3 z (xo,yo+Ly,zo+Lz) z Matlab 8 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 plot3(x(index(k,:)), y(index(k,:)), z(index(k,:))) hold on end (xo,yo,zo) (xo+Lx,yo,zo) (xo+Lx,yo,zo+Lz) (xo+Lx,yo+Ly,zo) Ly Lx 5 6 7 8 1 4 y (xo,yo+Ly,zo) (xo+Lx,yo+Ly,zo+Lz) x y
  • 9. 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) BoxPlot3(1, 1, 1, 3, 5, 7) BoxPlot3(4, 6, 8, 4, 5, 1) BoxPlot3(8, 11, 9, 1, 1, 1) Matlab 9 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(8, 11, 9, 1, 1, 1) 0 2 4 6 8 10 0 5 10 15 0 2 4 6 8 10
  • 10. Ejemplo: Onda senoidal sobre una superficie de un cilindro • Las coordenadas de una onda senoidal sobre la superficie de un cilindro se obtiene con cos( ) sin( ) cos( ) x = b t y = b t z = c at Si se asume que a = 10.0, b = 1.0, c = 0.3, y 0 ≤ t ≤ 2π, el script es Matlab 10 cos( )z = c at 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 c = 0.3, y 0 ≤ t ≤ 2π, el script es -0.5 0 0.5 1 -0.5 0 0.5 -0.2 0 0.2
  • 11. 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 Matlab 11 • Una superficie se define por la expresión donde x e y son las coordenadas en el plano-xy y z es la altura resultante ( )z = f x, y
  • 12. 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 Matlab 12 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.
  • 13. Ejemplo de superficie • Se requiere dibujar una superficie definida por definida en el rango −3 < x < 3 y −3 < y < 13 Se genera la función SurfExample para calcular las 4 2 2 2 ( ) = + 3 + - 2 - 2 - 2 + 6z x, y x x y x y x y Matlab 13 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)
  • 14. Ejemplos de superficies con surf y mesh [x,y,z] = SurfExample; surf(x, y, z) 2 4 5 10 15 0 50 100 150 200 Matlab 14 [x,y,z] = SurfExample; mesh(x, y, z) −4 −2 0 2 −5 0 5 -4 -2 0 2 4 -5 0 5 10 15 0 50 100 150 200
  • 15. Ejemplos de superficies con surf y mesh [x,y,z] = SurfExample; mesh(x, y, z) hidden off 50 100 150 200 Matlab 15 −4 −2 0 2 4 −5 0 5 10 15 0
  • 16. 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 Matlab 16 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)
  • 17. Ejemplo: combinando superficies y líneas • Las coordenadas de las esquinas son: 50 100 150 200 (−3, −3, z(−3,−3)) (−3, 13, z(−3,13)) (3, 13, z(3,13))(3, −3, z(3,−3)) Matlab 17 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') -3 -2 -1 0 1 2 3 -5 0 5 10 15 0 (−3, 13, z(−3,13))
  • 18. 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 Matlab 18 hold on z = repmat(zo, size(x)); % (50×12) surf(x, y, z) -10 -5 0 5 10 -5 0 5 10 15 79 79.5 80 80.5 81
  • 19. Ejemplo: combinando superficies y líneas [x, y, z] = SurfExample; surf(x, y, z); Disc(10, 80) Corners 150 200 Matlab 19 -10 -5 0 5 10 -5 0 5 10 15 0 50 100 −4 −2 0 2 4 −5 0 5 10 15 0 50 100 150 200
  • 20. 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 Matlab 20 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
  • 21. Ejemplo: modificación de la apariencia de gráficos [x,y,z] = SurfExample mesh(x, y, z) grid off 1010 15 0 50 100 150 200 Matlab 21 [x,y,z] = SurfExample mesh(x, y, z) axis off grid off -10 -5 0 5 10 -5 0 5 10
  • 22. Ejemplo: modificación de la apariencia de gráficos [x,y,z] = SurfExample mesh(x, y, z) axis on grid off box on 50 100 150 200 Matlab 22 box on -10 -5 0 5 10 -5 0 5 10 15 0
  • 23. 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 Matlab 23 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 Color [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] black white red green blue yellow magenta cyan gray
  • 24. Ejemplo: funciones adicionales para mejorar visualmente una superficie [x,y,z] = SurfExample; meshz(x, y, z) 1 2 3 5 10 15 0 50 100 150 200 Matlab 24 [x,y,z] = SurfExample; waterfall(x, y, z) -3 -2 -1 0 1 -5 0 -3 -2 -1 0 1 2 3 -5 0 5 10 15 0 50 100 150 200
  • 25. Ejemplo: funciones adicionales para mejorar visualmente una superficie [x,y,z] = SurfExample; ribbon(y, z) [x,y,z] = SurfExample; surfnorm(x, y, z) Matlab 25 0 2 4 6 8 10 12 14 16 -5 0 5 10 15 0 50 100 150 200 -4 -3 -2 -1 0 1 2 3 4 -5 0 5 10 15 0 50 100 150 200
  • 26. 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 Matlab 26 • 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
  • 27. Ejemplo de gráficos de contornos [x,y,z] = SurfExample; meshc(x, y, z) grid off 0 1 2 5 10 15 0 50 100 150 Matlab 27 [x,y,z] = SurfExample; surfc(x, y, z) grid off -3 -2 -1 0 -5 0 -3 -2 -1 0 1 2 -5 0 5 10 15 0 50 100 150 200
  • 28. Gráficos de contornos • Se pueden crear contornos sin visualizar la superficie, con etiquetas o sin etiquetas • La función contour(x, y, z, v) Matlab 28 crea un gráfico de contorno donde x, y, z son las coordenadas de los puntos que definen la superficie v, si es un escalar, es el número de niveles de contornos a visualizar y, si es un vector de valores, los contornos de la superficie en los valores de z. El uso de v es opcional
  • 29. Gráficos de contornos • Si se quiere etiquetar el contorno se usan las funciones [C, h] = contour(x, y, z, v) clabel(C, h, v) Matlab 29 clabel
  • 30. Ejemplos de contour [x,y,z] = SurfExample; contour(x, y, z) 0 2 4 6 8 10 12 Matlab 30 [x,y,z] = SurfExample; contour(x, y, z, 4) -3 -2 -1 0 1 2 3 -2 -3 -2 -1 0 1 2 3 -2 0 2 4 6 8 10 12
  • 31. Ejemplos de contour y clabel [x,y,z] = SurfExample; [C, h] = contour(x, y, z); clabel(C, h) 20 20 20 20 20 20 20 20 40 40 40 40 40 40 40 60 60 60 60 80 80 80 80 100 100 100 100 120 120 120140 0 2 4 6 8 10 12 Matlab 31 [x,y,z] = SurfExample; v= [10, 30:30:120]; [C, h] = contour(x, y, z, v); clabel(C, h, v) 20 40 60 60 80 100 100 120 120 140 140 160 -3 -2 -1 0 1 2 3 -2 10 10 10 10 10 10 30 30 30 30 30 30 30 30 60 60 60 60 60 60 90 90 90 90 120 120 120 120 -3 -2 -1 0 1 2 3 -2 0 2 4 6 8 10 12
  • 32. Gráficos de contornos 3D • Para obtener los contornos de superficies en 3D, se usa contour3(x, y, z, v) donde x, y, z son las coordenadas de los puntos de la superficie Matlab 32 x, y, z son las coordenadas de los puntos de la superficie v, si es un escalar, es el número de niveles de contornos a visualizar y, si es un vector de valores, los contornos de la superficie en los valores de z. El uso de v es opcional Para etiquetar los contornos se usa [C, h] = contour3(x, y, z, v) clabel(C, h, v)
  • 33. Gráficos de contornos 3D • Para rellenar la region entre contornos 2D con diferentes colores se usa contourf(x, y, z, v) los valores de los colores se pueden identificar usando Matlab 33 usando colorbar(s) que coloca una barra de colores y sus correspondientes valores numéricos adyacente a la figura La cantidad z es un string igual a 'horiz' o 'vert' para indicar la orientación de la barra. El valor por defecto es 'vert'
  • 34. Ejemplos de contour3, contourf y colorbar [x,y,z] = SurfExample; [C, h] = contour3(x, y, z); clabel(C, h) 2 3 10 20 40 60 80 100 120 140 160 180 20 20 2020 20 20 20 40 40 40 40 40 40 40 40 60 60 60 60 60 60 80 80 80 80 80 100 100 100 100 120 120 120 120 140 140 140 160 50 100 150 200 Matlab 34 [x,y,z] = SurfExample; [C, h] = contourf(x, y, z); colorbar -3 -2 -1 0 1 2 3 -2 0 2 4 6 8 10 12 -3 -2 -1 0 1 2 0 5 20 20 20 40 -3 -2 -1 0 1 2 3 -2 0 2 4 6 8 10 12 20 40 60 80 100 120 140 160 180−4 −2 0 2 4 −5 0 5 10 15 0
  • 35. Gráficos de contornos 3D • Las propiedades de las líneas y etiquetas se pueden modificar de forma similar que para plot • Por ejemplo, para cambiar el tamaño de las etiquetas creadas con contour a 14 puntos y las líneas del contorno azules, se siguen los pasos Matlab 35 contorno azules, se siguen los pasos [x, y, z] = SurfExample; [C, h] = contour(x, y, z, v) g = clabel(C, h, v); set(g, 'Fontsize', 14) set(h, 'LineColor', ‘b') 10 10 10 10 10 10 30 30 30 30 30 30 30 30 60 60 60 60 60 60 90 90 90 90 120 120 120 120 -3 -2 -1 0 1 2 3 -2 0 2 4 6 8 10 12
  • 36. Superficies cilíndricas, esféricas y elipsoidales • Se puede usar una curva 2D como generador para crear superficies de revolución usando [x, y, z] = cylinder(r, n) que retorna las coordenadas x, y, z de una superficie Matlab 36 que retorna las coordenadas x, y, z de una superficie cilíndrica utilizandoel vector r para definir una curva perfil La función cylinder trata cada elemento en r como un radio en n puntos equiespaciados alrededeor de su circunferencia. Si se omite n se considera el valor 20
  • 37. Ejemplo de superficie cilíndrica • Para la curva que se rota 360° alrededor del eje-z Se usa 26 intervalos equiespaciados en la dirección z y 16 intervalor equiespaciados en la dirección ≥ ≤= 1.1+sin( ) 0 2r z z π Matlab 37 y 16 intervalor equiespaciados en la dirección circunferencial • El script para graficar la superficie cilíndrica es zz = linspace(0, 2*pi, 26); [x, y, z] = cylinder(1.1+sin(zz), 16); surf(x, y, z) axis off
  • 38. Ejemplo de superficie cilíndrica Matlab 38 Axis of rotation
  • 39. Superficies cilíndricas, esféricas y elipsoidales • Para crear una esfera, se puede usar [x, y, z] = sphere(n); axis equal surf(x, y, z) donde n es el número de n x n elementos que Matlab 39 donde n es el número de n x n elementos que comprende la esfera de radio 1 centrado en el origen. Si n se omite se toma n = 20 -1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1
  • 40. Superficies cilíndricas, esféricas y elipsoidales • Para crear una elipsoide, se puede usar [x, y, z] = ellipsoid(xc, yc, zc, xr, yr, zr, n); axis equal surf(x, y, z) -1 0 1 Matlab 40 surf(x, y, z) en (xc, yc, zc) con longitud de semi-ejes en las direcciones x, y, z respectivamente, de xr, yr, y zr . n es el número de n x n elementos que comprende el elipsoide. Si n se omite se toma n = 20 -1 0 1 -3 -2 -1 0 1 2 3
  • 41. Angulo de visión • En ocasiones se desea cambiar el ángulo de vista por defecto de los gráficos 3D porque – No se muestra las características de interés – Varias vistas diferentes deben mostrarse usando subplot – La exploración de la superficie desde varias vistas es Matlab 41 – La exploración de la superficie desde varias vistas es deseable antes de decidir la orientación final • Para determinar el azimuth (a) y ángulo de elevación de la vista (e), se usa [a, e] = view
  • 42. Angulo de visión • Para orientar el objeto se usa el icono Rotate 3D en la ventana de la figura y se orienta el objeto hasta obtener una orientación satisfactoria. Se mostrará los valores de azimuth y elevación mientras se rota Matlab 42 • Esos valores se pueden ingresar en la expresión view(an, en) para crear la orientación deseada cuando se ejecuta un script Rotate 3D
  • 43. Sombreado (shading) • Las superficies creadas con surf usan la propiedad de sombreado por defecto llamada 'faceted'. • La función que cambia el sombreado es shading s Matlab 43 donde s es un string igual a faceted % Default flat interp
  • 44. Ejemplo de view y shading zz = linspace(0, 2*pi, 26); r=1.1+sin(zz); [x, y, z] = cylinder(r, 16); surf(x, y, z) Matlab 44 surf(x, y, z) view(-88.5, -48) shading faceted axis off vis3d
  • 45. Ejemplo de view y shading zz = linspace(0, 2*pi, 26); r=1.1+sin(zz); [x, y, z] = cylinder(r, 16); surf(x, y, z) Matlab 45 surf(x, y, z) view(-88.5, -48) shading flat axis off vis3d
  • 46. Ejemplo de view y shading zz = linspace(0, 2*pi, 26); r=1.1+sin(zz); [x, y, z] = cylinder(r, 16); surf(x, y, z) Matlab 46 surf(x, y, z) view(-88.5, -48) shading interp axis off vis3d
  • 47. Ejemplo de view y shading r = 1+sin(zz); [x, y, z] = cylinder(r, 16); surf(x, y, z) view(-88.5, -48) Matlab 47 view(-88.5, -48) shading interp colormap(copper) axis off vis3d
  • 48. Transparencia • Las superficies creadas con surf puede tener su opacidad alterada asignando un valor numérico al keyword 'FaceAlpha' • El efecto de este keyword en la superficie resultante es dependiente del tipo del sombreado seleccionado Matlab 48 es dependiente del tipo del sombreado seleccionado • Para ilustrar la opción de transparencia, se crea una función que genera los valores numéricos para la superficie dada por cos (1 cos ) sin (1 cos ) (1 sin ) v v v x a v u y a v u z ba u = + = − + = − +
  • 49. Transparencia • Si se asume que a = 1.13 y b = 1.14, la función fichero m para esta superficie es function [x, y, z] = Transparency a = 1.13; b = 1.14; uu = linspace(0, 2*pi, 30); Matlab 49 uu = linspace(0, 2*pi, 30); vv = linspace(-15, 6, 45); [u, v] = meshgrid(uu, vv); x = a.^v.*cos(v).*(1+cos(u)); y = -a.^v.*sin(v).*(1+cos(u)); z = -b*a.^v.*(1+sin(u));
  • 50. Ejemplo de transparencia [x, y, z] = Transparency; surf(x, y, z) shading interp axis vis3d off equal view([-35 38]) Matlab 50 view([-35 38]) [x, y, z] = Transparency; h = surf(x, y, z) set(h, 'FaceAlpha', 0.4) shading interp axis vis3d off equal view([-35 38])
  • 51. Ejemplo de transparencia [x, y, z] = Transparency; h = surf(x, y, z) set(h, 'FaceAlpha', 0.4) axis vis3d off equal view([-35 38]) Matlab 51 view([-35 38]) Nota: se omite shading
  • 52. Ejemplo: coloreado de cajas • Modificación de fichero m BoxPlot3 para que las seis superficies representadas por los rectángulos se rellene con un color diferente • La modificación se consigue usando fill3 Matlab 52 • La versión revisada de BoxPlot3 renombrada como BoxPlot3C es
  • 53. Ejemplo: coloreado de cajas function BoxPlot3C(xo, yo, zo, Lx, Ly, Lz, w) % w = 0, wire frame; w = 1, rectangles are colored x = [xo xo xo xo xo+Lx xo+Lx xo+Lx xo+Lx]; y = [yo yo yo+Ly yo+Ly yo yo yo+Ly yo+Ly]; z = [zo zo+Lz zo+Lz zo zo zo+Lz zo+Lz zo ]; index = zeros(6,5); index(1,:) = [1 2 3 4 1]; index(2,:) = [5 6 7 8 5]; index(3,:) = [1 2 6 5 1]; Matlab 53 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]; c = 'rgbcmy'; for k = 1:6 if w~=0 fill3(x(index(k,:)), y(index(k,:)), z(index(k,:)), c(k)) else plot3(x(index(k,:)), y(index(k,:)), z(index(k,:))) end hold on end
  • 54. Ejemplo: coloreado de cajas 9 10 BoxPlot3C(1, 1, 1, 3, 5, 7, 1) BoxPlot3C(4, 6, 8, 4, 5, 1, 0) BoxPlot3C(8, 11, 9, 1, 1, 1, 1) Matlab 54 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 1 2 3 4 5 6 7 8 9
  • 55. Ejemplo: intersección de un cilindro y una esfera y resaltado de su intersección • La curva que resulta de la intersección de una esfera de radio 2a centrada en el origen y un cilindro circular de radio a centrado en (a, 0) es dado por las ecuaciones paramétricas (1 cos ) sin x a y a ϕ ϕ = + = Matlab 55 donde 0 ≤ ϕ ≤ 4π • Para crear una esfera de radio 2a, se multiplica cada coordenada de sphere por 2a. sin 2 sin( / 2) y a z a ϕ ϕ = =
  • 56. Ejemplo: intersección de un cilindro y una esfera y resaltado de su intersección • Las coordenadas de cylinder se modifican con la transformación: x → ax + a y → ay z → 4az − 2a Matlab 56 z → 4az − 2a • Se asume que a = 1. El script es
  • 57. Ejemplo: intersección de un cilindro y una esfera y resaltado de su intersección a = 1; [xs, ys, zs] = sphere(30); surf(2*a*xs, 2*a*ys, 2*a*zs) hold on [x, y, z] = cylinder; surf(a*x+a, a*y, 4*a*z-2*a) Matlab 57 surf(a*x+a, a*y, 4*a*z-2*a) shading interp t = linspace(0, 4*pi, 100); x = a*(1+cos(t)); y = a*sin(t); z = 2*a*sin(t/2); plot3(x, y, z, 'y-', 'Linewidth', 2.5); axis equal off view([45, 30])
  • 58. Ejemplo: mejora de gráficos 2D con objetos 3D • Para una esfera de radio a y un elipsoide con su eje mayor en la dirección x igual a 2a, eje menor en la dirección y igual a 2b, y un eje menor en la dirección z igual a 2c, la proporción del volumen de un elipsoide con relación al volumen de una esfera es Matlab 58 elipsoide con relación al volumen de una esfera es • Se crea el siguiente programa para mejorar la comprensión de un gráfico de V como función de b/a para varios valores de c/a ellipse sphere V b c V V a a    = =      
  • 59. Ejemplo: mejora de gráficos 2D con objetos 3D b = [0.5, 1]; c = b; for k = 1:2 plot(b, b*c(k), 'k-') text(0.75, (b(1)*c(k)+b(2)*c(k))/2-0.02, ['c/a = ' num2str(c(k))]) hold on end xlabel('b/a') ylabel('V') for k = 1:4 k Matlab 59 switch k case 1 axes('position', [0.12, 0.2, 0.2, 0.2]) [xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(1), c(1), 20); mesh(xs, ys, zs) text(0, 0, 1, ['b/a = ' num2str(b(1)) ' c/a = ' num2str(c(1))]) case 2 axes ('position', [0.1, 0.5, 0.2, 0.2]) [xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(1), c(2), 20); mesh (xs, ys, zs) text (0, 0, 1.5, ['b/a = ' num2str(b(1)) ' c/a = ' num2str(c(2))])
  • 60. Ejemplo: mejora de gráficos 2D con objetos 3D case 3 axes ('position', [0.7, 0.65, 0.2, 0.2]) [xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(2), c(2), 20); mesh (xs, ys, zs) text (-1.5, 0, 2, ['b/a = ' num2str(b(2)) ' c/a = ' num2str(c(2))]) case 4 axes ('position', [0.7, 0.38, 0.2, 0.2]) [xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(2), c(1), 20); Matlab 60 [xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(2), c(1), 20); mesh (xs, ys, zs) text (-1.5, 0, 1.5, ['b/a = ' num2str(b(2)) ' c/a = ' num2str(c(1))]) end colormap([0 0 0]) axis equal off end
  • 61. Ejemplo: mejora de gráficos 2D con objetos 3D 0.7 0.8 0.9 1 c/a = 1 b/a = 0.5 c/a = 1 b/a = 1 c/a = 1 Matlab 61 0.5 0.6 0.7 0.8 0.9 1 0.2 0.3 0.4 0.5 0.6 c/a = 0.5 b/a V b/a = 0.5 c/a = 0.5 b/a = 1 c/a = 0.5
  • 62. Rotación y traslación de objetos 3D: ángulos de Euler • La rotación y traslación de un punto p(x,y,z) a otra posición P(X,Y,Z) es determinado por 11 12 13 21 22 23 21 22 23 x y z X = L + a x + a y + a z Y = L + a x + a y + a z Z = L + a x + a y + a z Matlab 62 donde Lx, Ly, y Lz son los componentes x, y, z de la traslación, respectivamente, y aij, i, j = 1, 2, 3, son los elementos de 21 22 23zZ = L + a x + a y + a z          cos cos -cos sin sin = cos sin + sin sin cos cos cos - sin sinψsin -sin cos sin sin - cos sin cos sin cos + cos sinψsin cos cos ψ χ ψ χ ψ a φ χ φ ψ χ φ χ φ χ φ ψ φ χ φ ψ χ φ χ φ χ φ ψ
  • 63. Rotación y traslación de objetos 3D: ángulos de Euler • Las cantidades φ, ψ, y χ son los ángulos de rotación ordenados (ángulos de Euler) del sistema de coordenadas alrededor del origen φ alrededor del eje x ψ alrededor del eje y Matlab 63 ψ alrededor del eje y χ alrededor del eje z • En general, (x,y,z) pueden ser escalares, vectores de la misma longitud, o matrices del mismo orden • Se crea la función EulerAngles
  • 64. Rotación y traslación de objetos 3D: ángulos de Euler function [Xrt, Yrt, Zrt] = EulerAngles(psi, chi, phi, Lx, Ly, Lz, x, y, z) a = [cos(psi)*cos(chi), -cos(psi)*sin(chi), sin(psi); … cos(phi)*sin(chi)+sin(phi)*sin(psi)*cos(chi), … cos(phi)*cos(chi)-sin(phi)*sin(psi)*sin(chi), … -sin(phi)*cos(psi); … sin(phi)*sin(chi)-cos(phi)*sin(psi)*cos(chi), … Matlab 64 sin(phi)*sin(chi)-cos(phi)*sin(psi)*cos(chi), … sin(phi)*cos(chi)+cos(phi)*sin(psi)*sin(chi), … cos(phi)*cos(psi)]; Xrt = a(1,1)*x+a(1,2)*y+a(1,3)*z+Lx; Yrt = a(2,1)*x+a(2,2)*y+a(2,3)*z+Ly; Zrt = a(3,1)*x+a(3,2)*y+a(3,3)*z+Lz; 11 12 13 21 22 23 21 22 23 x y z X =L +a x+a y+a z Y =L +a x+a y+a z Z=L +a x+a y+a z
  • 65. Rotación y traslación de objetos 3D: generación de Toro • Las ecuaciones para generar un toro son ( ) 2 2 2 2 cos sin x = r θ y = r θ z = ± a - x + y - b Torus Matlab 65 donde b − a ≤ r ≤ b + a, 0 ≤ θ ≤ 2π, y b > a Se crea la función Torus para obtener las coordenadas del toro que usa las función real para eliminar la parte imaginaria debida a redondeos numéricos ( )
  • 66. Rotación y traslación de objetos 3D: generación de Toro function [X, Y, Z] = Torus(a, b) r = linspace(b-a, b+a, 10); th = linspace(0, 2*pi, 22); x = r'*cos(th); y = r'*sin(th); Matlab 66 sin z = real(sqrt(a^2-(sqrt(x.^2+y.^2)-b).^2)); X = [x x]; Y = [y y]; Z = [z -z];
  • 67. Rotación y traslación de objetos 3D: generación de Toro • Se obtendrá cuatro gráficas del toro: – Sin rotación – Rotado 60° alrededor del eje x (φ = 60°) y comparado con el toro original – Rotado 60° alrededor del eje y (ψ = 60°) y comparado Matlab 67 – Rotado 60° alrededor del eje y (ψ = 60°) y comparado con el toro original – Rotado 60° alrededor del eje x (φ = 60°), rotado 60° alrededor del eje y (ψ = 60°) y comparado con el toro original • Se asume que a = 0.2 y b = 0.8 y se usa colormap para producir una malla de líneas
  • 68. Rotación y traslación de objetos 3D: generación de Toro [X, Y, Z] = Torus(0.2, 0.8); psi = [0, pi/3, pi/3]; chi = [0, 0, 0]; phi = [pi/3,0, pi/3]; Lx = 0; Ly = 0; Lz = 0; for k = 1:4 subplot(2,2,k) if k==1 Matlab 68 if k==1 mesh(X, Y, Z) else mesh(X, Y, Z) hold on [Xr Yr Zr] = EulerAngles(psi(k-1), chi(k-1), … phi(k-1), Lx, Ly, Lz, X, Y, Z); mesh(Xr, Yr, Zr) end
  • 69. Rotación y traslación de objetos 3D: generación de Toro switch k case 1 text(0.5, -0.5, 1, 'Torus') case 2 text(0.5, -0.5, 1,'phi = 60circ') case 3 text(0.5,-0.5,1,'psi = 60circ') Matlab 69 text(0.5,-0.5,1,'psi = 60circ') case 4 text(0.5, -0.5, 1.35,'psi = 60circ') text(0.55, -0.5, 1,'phi = 60circ') end colormap([0 0 0]) axis equal off grid off end
  • 70. Rotación y traslación de objetos 3D: generación de Toro Torus φ = 60° Matlab 70 ψ = 60° φ = 60° ψ = 60°
  • 71. Creación de gráficos interactivamente • El entorno Matlab permite crear gráficas interactivamente de varias maneras Seleccionar variable(s) + botón derecho Matlab 71 Seleccionar tipo de gráfico
  • 72. Creación de gráficos interactivamente • Se introducen los siguientes comandos: >> N=50; >> y=randn(N,1); >> y2=filter([1 1]/2,1,y); • Se pulsa sobre la variable y en el Workspace y se Matlab 72 • Se pulsa sobre la variable y en el Workspace y se pulsa sobre el icono . Se obtiene el gráfico 0 5 10 15 20 25 30 35 40 45 50 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5
  • 73. Creación de gráficos interactivamente • Se puede modificar el tipo de gráfico desplegando el menú para obtener la descripción Matlab 73 Más ayuda
  • 74. Creación de gráficos interactivamente • Cuando se selecciona un tipo de gráfico se genera el comando correspondiente en la ventana de comandos Matlab 74
  • 75. Creación de gráficos interactivamente • En la ventana de figura se puede modificar el gráfico, generar el código y guardarlo para ser invocado Matlab 75