Documente Academic
Documente Profesional
Documente Cultură
Materia:
Titular:
Tarea 2
Alumno:
[X,Y,Z] = sphere(n);
En donde n representa el número de filas y columnas que tendrá cada una de las componen-
tes X,Y y Z, la ilustración 1 muestra una esfera completa.
Para obtener esferas de radios diferentes solo es necesario multiplicar X, Y y Z por el radio
que se necesite, de esta forma obtuvimos dos esferas, y las colocamos una dentro de otra
situando a las dos en el origen, en la ilustración 2 están graficados los 100 puntos obtenidos
mediante el siguiente código:
[X1,Y1,Z1] = sphere(10);
[X2,Y2,Z2] = sphere(10);
radio1=2;
radio2=5;
X1=X1*radio1;
Y1=Y1*radio1;
Z1=Z1*radio1;
X2=X2*radio2;
Y2=Y2*radio2;
Z2=Z2*radio2;
figure,plot3(X1,Y1,Z1,'*r');
hold on;
plot3(X2,Y2,Z2,'*b');
Página 2 de 6
Temas Selectos de Visión por Computadora.
Para lograr hacer rotar estas esferas se utilizaron las matrices de rotación en tres dimensio-
nes, mismas que se muestran en la ilustración 3, dado que nadamas necesitamas rotar las
esferas en un eje, se opto por rotarlas en el eje y.
En la ilustración 4 se muestran cuatro tiempos en los que la esfera pequeña (roja) esta ro-
tando 5 grados a la derecha, mientras la esfera grande (azul) esta rotando 7 grados a la iz-
quierda. El código empleado es el siguiente:
grados1 = -5;
grados2 = 7;
inc1= pi*grados1/180;
inc2= pi*grados2/180;
t1=0;
t2=0;
for paso=1:60
t1=t1+inc1;
t2=t2+inc2;
c1=cos(t1);
s1=sin(t1);
c2=cos(t2);
s2=sin(t2);
Página 3 de 6
Temas Selectos de Visión por Computadora.
M1=[c1 0 s1 0;
0 1 0 0;
-s1 0 c1 0;
0 0 0 1];
M2=[c2 0 s2 0;
0 1 0 0;
-s2 0 c2 0;
0 0 0 1];
for i=1:size(X1,1)
for j=1:size(X1,1)
P1=[X1(i,j);Y1(i,j);Z1(i,j);1];
P2=M1*P1;
X3(i,j)=P2(1);
Y3(i,j)=P2(2);
Z3(i,j)=P2(3);
P3=[X2(i,j);Y2(i,j);Z2(i,j);1];
P4=M2*P3;
X4(i,j)=P4(1);
Y4(i,j)=P4(2);
Z4(i,j)=P4(3);
end
end
figure,plot3(X3,Y3,Z3,'*r');
hold on;
plot3(X4,Y4,Z4,'*b');
end
Ilustración 4 Dos esferas, la esfera pequeña (roja) esta rotando a la izquierda, mientras que la grande (azul) lo hace
a la derecha.
El paso siguiente fue proyectar las esferas a un plano bidimensional, para ello se utilizaron
las ecuaciones de proyección vistas en clase:
ݔ. ݂ ݕ. ݂
ݔᇱ = ݕᇱ =
ݖ ݖ
Página 4 de 6
Temas Selectos de Visión por Computadora.
En donde f representa la distancia focal de proyección, mientras que (x, y, z) son las coor-
denadas de un punto en tres dimensiones y (x’, y’) son las nuevas coordenadas del punto
proyectado en un plano bidimensional. El valor para la distancia focal en este caso fue de 1.
Dado que los puntos obtenidos de la esfera en tres dimensiones están distribuidos de mane-
ra uniforme, se opto por no proyectar todos, en su lugar se eligieron al azar solo unos de
ellos.
Ilustración 5 Proyección de dos esferas en tres dimensiones girando una dentro de otra a un plano bidimensional.
Página 5 de 6
Temas Selectos de Visión por Computadora.
f= 10;
f(1:(n+1)^2)=1;
f=f';
grados1 = -10;
grados2 = 10;
inc1= pi*grados1/180;
inc2= pi*grados2/180;
t1=0;
t2=0;
for paso=1:60
t1=t1+inc1;
t2=t2+inc2;
c1=cos(t1);
s1=sin(t1);
c2=cos(t2);
s2=sin(t2);
M1=[c1 0 s1 0;
0 1 0 0;
-s1 0 c1 0;
0 0 0 1];
M2=[c2 0 s2 0;
0 1 0 0;
-s2 0 c2 0;
0 0 0 1];
for i=1:size(X1,1)
for j=1:size(X1,1)
P1=[X3(i,j);Y3(i,j);Z3(i,j);1];
P2=M1*P1;
X3(i,j)=P2(1);
Y3(i,j)=P2(2);
Z3(i,j)=P2(3);
P3=[X4(i,j);Y4(i,j);Z4(i,j);1];
P4=M2*P3;
X4(i,j)=P4(1);
Y4(i,j)=P4(2);
Z4(i,j)=P4(3);
end
end
x3=reshape(X3, 1, n_sqr)';
y3=reshape(Y3, 1, n_sqr)';
z3=reshape(Z3, 1, n_sqr)';
z3 = z3 + z;
aux=zeros(round(n_sqr/10),1);
for i=1:length(aux)
aux(i)=floor(rand(1)*n_sqr)+1;
end
xp1 = (x3.*f)./z3;
yp1 = (y3.*f)./z3;
plot(xp1(aux), yp1(aux), '.r'); grid on;
hold on;
x4=reshape(X4, 1, (n+1)^2)';
y4=reshape(Y4, 1, (n+1)^2)';
z4=reshape(Z4, 1, (n+1)^2)';
z4 = z4 + z;
for i=1:length(aux)
aux(i)=floor(rand(1)*n_sqr)+1;
end
xp2 = (x4.*f)./z4;
yp2 = (y4.*f)./z4;
plot(xp2(aux), yp2(aux), '.r'); grid on;
hold off;
pause(0.2);
end
Página 6 de 6