You are on page 1of 20

MATLAB

ROTACIONES EN EL ESPACIO 3D DE LOS ANGULOS DE EULER


Funciones y programas para diferentes rotaciones 3D

Autor:

Ingeniero Electrnico: Monteza Zevallos Fidel Tomas

Setiembre de 2016 (Primera Edicin)

V. J. M. J. / A. M. M. J.
ndice general

Introduccin

1.- Rotaciones con respecto a los ejes X, Y y Z

2.- Matrices de giro con ngulos de Euler en el mismo sentido de las agujas del reloj

3.- Matrices de giro con ngulos de Euler en el sentido opuesto de las agujas del reloj

4. Lneas del algoritmo de la funcin: vector3d (Vector en tres dimensiones)

5. Lneas del algoritmo de la funcin: circunferencia1 (Dibujar los ngulos de rotacin)

6. Lneas del algoritmo de la funcin: rotacion3dejex (Dibujar la rotacin de un vector sobre el Eje X de un sistema 3D)

7. Lneas del algoritmo de la funcin: rotacion3dejey (Dibujar la rotacin de un vector sobre el Eje Y de un sistema 3D)

8. Lneas del algoritmo de la funcin: rotacion3dejez (Dibujar la rotacin de un vector sobre el Eje Z de un sistema 3D)

9. Lneas del algoritmo del programa: ROTACION3DEJESXYZN3 (Dibujar la rotacin secuencial de un vector sobre el Eje
X, el Eje Y, y el Eje Z de un sistema 3D)
Introduccin
Los ngulos de Euler constituyen un conjunto de tres coordenadas angulares que sirven para especificar la orientacin de un sistema de referencia de
ejes ortogonales, normalmente mvil, respecto a otro sistema de referencia de ejes ortogonales normalmente fijos.

Fueron introducidos por Leonhard Euler en mecnica del slido rgido para describir la orientacin de un sistema de referencia solidario con un slido
rgido en movimiento.

Dados dos sistemas de coordenadas xyz y XYZ con origen comn, es posible especificar la posicin de un sistema en trminos del
otro usando tres ngulos , y .

La definicin matemtica es esttica y se basa en escoger dos planos, uno en el sistema de referencia y otro en el triedro rotado.
En el esquema adjunto seran los planos xy y XY. Escogiendo otros planos se obtendran distintas convenciones alternativas, las
cuales se llaman de Tait-Bryan cuando los planos de referencia son no-homogneos (por ejemplo, xy y XY son homogneos,
mientras xy y XZ no lo son).

La interseccin de los planos coordenados xy y XY escogidos se llama lnea de nodos, y se usa para definir los tres ngulos:
es el ngulo entre el eje x y la lnea de nodos.
es el ngulo entre el eje z y el eje Z.
es el ngulo entre la lnea de nodos y el eje X.

Dos sistemas de coordenadas ortogonales en el que se muestran los ngulos de Euler

Ms adelante se establecer que los tres ngulos de Euler descritos son los valores de las tres rotaciones intrnsecas que describen
el sistema.
1.- Rotaciones con respecto a los ejes X, Y y Z

En tres dimensiones se pueden hacer tres rotaciones:


- Rotacin en OX
- Rotacin en OY
- Rotacin en OZ

2.- Matrices de giro con ngulos de Euler en el mismo sentido de las agujas del reloj

1 0 0 0 0
0 0 1 0 0
0 0 0 0 1
Matriz de giro en el Eje X Matriz de giro en el Eje Y Matriz de giro en el Eje Z

3.- Matrices de giro con ngulos de Euler en el sentido opuesto de las agujas del reloj

1 0 0 0 0
0 0 1 0 0
0 0 0 0 1
Matriz de giro en el Eje X Matriz de giro en el Eje Y Matriz de giro en el Eje Z
4. Lneas del algoritmo de la funcin: vector3d (Vector en tres dimensiones)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Programa que permite visualizar el grafico de vectores. Importante en esta funcion las lineas se encuentran comentadas
% Esta funcion puede graficar vectores 2D y vectores 3D con flechas dependiendo de las dimensiones de entrada
%
% Ejemplo de un vector 3D: p0 = [1 2 3]; % Coordenadas del punto inicial p0
% p1 = [4 5 6]; % Coordenadas del punto final p1
% color = 'r' % Color rojo seleccionado
% ancho = 10 % Grozor del vector
% vector3d(p0,p1,color,ancho)
%
% Ejemplo de un vector 2D: p0 = [1 2]; % Coordenadas del punto inicial p0
% p1 = [4 5]; % Coordenadas del punto final p1
% color = 'r' % Color rojo seleccionado
% ancho = 10 % Grozor del vector
% vector3d(p0,p1,color,ancho)
%
% Debe ingresar los valores de p0 p1 color tal como se indica lineas arriba en el Command Window
% Tipeando vector3d(p0,p1,color,ancho) en el Command Window se graficara la linea de un vector con una flecha
% desde el punto p0 al punto p1 en color rojo y con un grozor de 10
% Otra alternativa es que puede tipear directamente en el Command Window:
% vector3d([1 2 3],[4 5 6],'r',10) % Visulizara un vector en 3D
% vector3d([1 2],[4 5],'r',10) % Visulizara un vector en 2D
% Puede seleccionar cualquier color tan solo cambiando el tercer elemento de la funcion
% Puede seleccionar cualquier grozor tan solo cambiando el cuarto elemento de la funcion
% Si no desea trabajar directamente con la funcion, puede ejecutar el archivo VECTOR2D1.
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% p0, p1, color, ancho son parametros de entrada. Se dibuja una flecha que representa un vector desde p0 a p1
function vector3d(p0,p1,color,ancho)

%Con estas lineas se podra lograr la grafica de vectores en un sistema 3D (x,y,z)


if max(size(p0))==3 % El maximo tamao de valores de p0 (x0,y0,z0) debe ser 3 (Representa el punto inicial del vector 3D)
if max(size(p1))==3 % El maximo tamao de valores de p1(x1,y1,z1) debe ser 3 (Representa el punto final del vector 3D)
x0 = p0(1); % El valor que se ingrese en la primera posicion de p0 sera asignado a la variable x0
y0 = p0(2); % El valor que se ingrese en la segunda posicion de p0 sera asignado a la variable y0
z0 = p0(3); % El valor que se ingrese en la tercera posicion de p0 sera asignado a la variable z0
x1 = p1(1); % El valor que se ingrese en la primera posicion de p1 sera asignado a la variable x1
y1 = p1(2); % El valor que se ingrese en la segunda posicion de p1 sera asignado a la variable y1
z1 = p1(3); % El valor que se ingrese en la tercera posicion de p1 sera asignado a la variable z1
plot3([x0;x1],[y0;y1],[z0;z1],color,'LineWidth',ancho); % Se grafica una linea entre el punto p0 y el punto p1

p = p1-p0; % Restamos los valores del punto final (p1) menos los valores del punto inicial (p0)
alpha = 0.07; % Tamao de la cabeza de flecha relativo a la longitud del vector
beta = 0.2; % Ancho de la base de la cabeza de flecha relativo a su longitud

hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];


hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];
hw = [z1-alpha*p(3);z1;z1-alpha*p(3)];

hold on % Mantenemos el grafico de de la linea que represnta al vector 3D


plot3(hu(:),hv(:),hw(:),color,'LineWidth',ancho) % Se grafica la cabeza de flecha del vector
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Estas lineas se activaran SOLO si se ejecuta la funcion desde el Command Window tal como se sugiere en los comentarios de cabecera%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% grid on
% xlabel('EJE X','Color','r') % Dar nombre al eje X
% ylabel('EJE Y','Color','g') % Dar nombre al eje Y
% zlabel('EJE Z','Color','b') % Dar nombre al eje Z
% hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hold off
else
error('p0 y p1 deben tener las mismas dimensiones') % ALERTA para solo aceptar que p0 y p1 sean de igual extension
end

%Con estas lineas se podra lograr la grafica de vectores en un sistema 2D (x,y)


elseif max(size(p0))==2 % El maximo tamao de valores de p0 (x0,y0) debe ser 2 (Representa el punto inicial del vector 2D)
if max(size(p1))==2 % El maximo tamao de valores de p1 (x0,y0) debe ser 2 (Representa el punto inicial del vector 2D)
x0 = p0(1); % El valor que se ingrese en la primera posicion de p0 sera asignado a la variable x0
y0 = p0(2); % El valor que se ingrese en la segunda posicion de p0 sera asignado a la variable y0
x1 = p1(1); % El valor que se ingrese en la primera posicion de p1 sera asignado a la variable x1
y1 = p1(2); % El valor que se ingrese en la segunda posicion de p1 sera asignado a la variable y1
plot([x0;x1],[y0;y1],color,'LineWidth',ancho); % Se grafica una linea entre el punto p0 y el punto p1

p = p1-p0; % Restamos los valores del punto final (p1) menos los valores del punto inicial (p0)
alpha = 0.1; % Tamao de la cabeza de flecha relativo a la longitud del vector
beta = 0.1; % Ancho de la base de la cabeza de flecha relativo a su longitud

hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];


hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];

hold on
plot(hu(:),hv(:),color,'LineWidth',ancho) % Se grafica la cabeza de flecha

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Estas lineas se activaran SOLO si se ejecuta la funcion desde el Command Window tal como se sugiere en los comentarios de cabecera%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% grid on
% xlabel('EJE X','Color','r') % Dar nombre al eje X
% ylabel('EJE Y','Color','g') % Dar nombre al eje Y
% hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

else
error('p0 y p1 deben tener las mismas dimensiones') % ALERTA para solo aceptar que p0 y p1 seab de igual extension
end
else
error('ATENCION: Esta funcion solo acepta vectores 2D o 3D') % ALERTA que indica los dos tipos de sistemas vectoriales a graficar
end
Se tipea la funcion vector3d en el Command Window con sus respectivos datos para obtener un vector 2D

Grafico de un vector 2D con los datos ingresados en la funcion vector3d


Se tipea la funcion vector3d en el Command Window con sus respectivos datos para obtener un vector 3D

Grafico de un vector 3D con los datos ingresados en la funcion vector3d


5. Lneas del algoritmo de la funcin: circunferencia1 (Dibujar los ngulos de rotacin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Funcion circunferencia3d que permite visualizar una circunferencia con centro en (0,0,0) del sistema 3D. Las lineas se encuentran comentadas
% Valores sugeridos:
% puntox = 1; % Valor de activacion del Eje X
% puntoy = 1; % Valor de activacion del Eje Y
% puntoz = 0; % Valor de activacion del Eje Z
% x = 0; % Valor del Eje X
% y = 0; % Valor del Eje Y
% z = 1; % Valor del Eje Z
% radio = 2; % Valor del radio de la circunferencia
% angulo1 = 0; % Punto inicial del angulo de giro del grafico
% angulo2 = 2*pi; % Angulo de giro del grafico
% color = 'r' % Color rojo seleccionado
% ancho = 10 % Grozor la linea de la circunfrencia
%
% Tipeando en el Command Window:
% circunferencia1(1,1,0,0,0,1,2,0,2*pi,'b',5) Se graficara la circunferencia color azul en el plano XY (El Eje Z puede tener cualquier valor)
% circunferencia1(1,0,1,0,1,0,2,0,2*pi,'g',5) Se graficara la circunferencia color verde en el plano XZ (El Eje Y puede tener cualquier valor)
% circunferencia1(0,1,1,1,0,0,2,0,2*pi,'r',5) Se graficara la circunferencia color rojo en el plano YZ (El Eje X puede tener cualquier valor)
%
%INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function circunferencia1(puntox,puntoy,puntoz,x,y,z,radio,angulo1,angulo2,color,ancho)

r = radio; % Valor del radio de la circunferencia


Theta1 = angulo1; % Valor del angulo descrito durante el giro
Theta2 = angulo2; % Valor del angulo descrito durante el giro

if puntoz == 0 & puntoy == 1 & puntox == 1 % Graficamos el circulo en el plano XY (El Eje Z puede tener cualquier valor)
h = x; % Valor del Eje X (Punto central de la circunferencia)
i = y; % Valor del Eje Y (Punto central de la circunferencia)
j = z; % Valor del Eje Z (Punto central de la circunferencia)

t = Theta1:Theta2/20:Theta2; % Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20


Eje_x = h+r*cos(t); % La variable Eje_x es el valor inicial del grafico en el Eje X
Eje_y = i+r*sin(t); % La variable Eje_y es el valor inicial del grafico en el Eje Y
Eje_z = j+0*sin(t); % Aqui el eje Z es cero

end

if puntoz == 1 & puntoy == 0 & puntox == 1 % Graficamos el circulo en el plano XZ (El Eje Y puede tener cualquier valor)
h = x; % Valor del Eje X (Punto central de la circunferencia)
i = y; % Valor del Eje Y (Punto central de la circunferencia)
j = z; % Valor del Eje Z (Punto central de la circunferencia)

t = Theta1:Theta2/20:Theta2; % Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20


Eje_x = h+r*cos(t); % La variable Eje_x es el valor inicial del grafico en el Eje X
Eje_y = i+0*sin(t); % Aqui el eje Y es cero
Eje_z = j+r*sin(t); % La variable Eje_z es el valor inicial del grafico en el Eje Z

end
if puntoz == 1 & puntoy == 1 & puntox == 0 % Graficamos el circulo en el plano YZ (El Eje X puede tener cualquier valor)
h = x; % Valor del Eje X (Punto central de la circunferencia)
i = y; % Valor del Eje Y (Punto central de la circunferencia)
j = z; % Valor del Eje Z (Punto central de la circunferencia)

t = Theta1:Theta2/20:Theta2; % Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20


Eje_x = h+0*sin(t); % Aqui el eje X es cero
Eje_y = i+r*cos(t); % La variable Eje_y es el valor inicial del grafico en el Eje Y
Eje_z = j+r*sin(t); % La variable Eje_z es el valor inicial del grafico en el Eje Z

end

plot3(h,i,j,'o','MarkerFaceColor',color) % Graficar el punto central de la circunferencia


hold on % Mantener el grafico del punto central de la circunferencia
plot3(Eje_x,Eje_y,Eje_z,color,'LineWidth',ancho) % Graficar la circunferencia en las coordenadas X Y Z
grid on

axis square % Adaptar que la figura salga en un cuadrado


xlabel('EJE X','Color','r') % Dar nombre al eje X
ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z

end

Grafico de una circunferencia con los datos ingresados en la funcion circunferencia1


6. Lneas del algoritmo de la funcin: rotacion3dejex (Dibujar la rotacin de un vector sobre el Eje X de un sistema 3D)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo rotacion3dejex para hallar resultados de una rotacion en el Eje X de un espacio 3D
% Se tienen un vector Py que va ha rotar sobre el eje X originando el vector Py2
% Se tienen un vector Pz que va ha rotar sobre el eje Z originando el vector Pz3
%
% Suponer que para un sistema de 3 dimensiones Py=[0 1 0]
% Suponer que para un sistema de 3 dimensiones Pz=[0 0 1]
%
% Puede trabajar igualmente con la funcion rotx del Robotics toolbox de MATLAB
% Utiliza las funciones:
% circunferencia1 (Dibujar los angulos de rotacion)
% vector3d (Dibujar los vectores que rotan en el espacion 3D)
%
% Tipeando: rotacion3dejex(pi/4)
% Obtendra una rotacion del vector Py del Eje Y y del vector Pz del Eje Z
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function rotacion3dejex(Angulo1)

Py = [0;1;0]; % Vector rotacion en el eje Y del sistema de referencia


Pz = [0;0;1]; % Vector rotacion en el eje Z del sistema de referencia

p0 = [0;0;0]; % Coordenadas del punto de inicio comun p0 (Centro de coordenadas)


PX1 = [4;0;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PY1 = [0;4;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PZ1 = [0;0;4]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PX2 = [-4;0;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PY2 = [0;-4;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PZ2 = [0;0;-4]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)

% Giro en el eje X del vector inicial Py y del vector Pz


for Theta1=0:0.01:Angulo1 % Declaramos a Theta3 de 0 a 45 en espacios de 0.01
angulo1_rad = acos(cos(Theta1)); % Angulo en radianes
angulo1_grad = (angulo1_rad*360)/(2*pi); % Conversion del angulo en radianes a grados (Theta3)
Longitud1 = norm(Py); % Hallamos la norma del vector Py
%Rx = [1 0 0;0 cos(Theta1) sin(Theta1);0 -sin(Theta1) cos(Theta1)]; % Matriz de rotacion en el eje X en el sentido opuesto a las agujas del
reloj del espacio 3D
% Rx = [1 0 0;0 cos(Theta1) -sin(Theta1);0 sin(Theta1) cos(Theta1)]; % Matriz de rotacion en el eje X en el mismo sentido a las agujas del
reloj del espacio 3D
% Pyzx3 = Rx*Pyzx2 % Rotacion del vector Pyzx2 en el eje X originando el vector Pyzx3
Py2 = (rotx(Theta1))*Py % Ecuacion con la funcion rotx semejante a la matriz Rx
Pz3 = (rotx(Theta1))*Pz % Ecuacion con la funcion rotx semejante a la matriz Rx

vector3d(p0,PX1,'r',2) % Graficamos el vector del Eje X positivo


hold on
vector3d(p0,PY1,'g',2) % Graficamos el vector del Eje Y positivo
hold on
vector3d(p0,PZ1,'b',2) % Graficamos el vector del Eje Z positivo
hold on
vector3d(p0,PX2,'r',2) % Graficamos el vector del Eje X negativo
hold on
vector3d(p0,PY2,'g',2) % Graficamos el vector del Eje Y negativo
hold on
vector3d(p0,PZ2,'b',2) % Graficamos el vector del Eje Z negativo
hold on

vector3d(p0,Py,'g',1) % Graficamos el vector de inicio del desplazamiento del vector Py


hold on
vector3d(p0,Pz,'b',1) % Graficamos el vector de inicio del desplazamiento del vector Pz
hold on

circunferencia1(0,1,1,0,0,0,0.2,0,Theta1,'g',2) % Graficamos una circunferencia de referencia de giro del Eje Y


hold on
% circunferencia2(0,1,1,0,0,0,0.2,pi/2,pi,'b',2) % Graficamos una circunferencia de referencia de giro del Eje Y
% hold on
circunferencia1(0,1,1,1,0,0,0.5,0,Theta1*7,'r',2) % Graficamos una circunferencia de referencia de giro del Eje Y
hold on

vector3d(p0,Py2,'g',1) % Graficamos el vector Py2


hold on
vector3d(p0,Pz3,'b',1) % Graficamos el vector Pz3

xlabel('EJE X','Color','r') % Dar nombre al eje X


ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas
title(['ROTACION: Eje X',' ','Angulo Theta1 = ' num2str(angulo1_grad)]); % Declaramos un titulo con los resultados de los angulos
axis([-(Longitud1+1) (Longitud1+1) -(Longitud1+1) (Longitud1+1) -(Longitud1+1) (Longitud1+1)]); % Establece sistema ejes fijo del vector Py
pause(0.01)
end
end

Grafico de rotacion 3D sobre el Eje X (Color rojo) con los datos ingresados en la funcion rotacion3dejex
7. Lneas del algoritmo de la funcin: rotacion3dejey (Dibujar la rotacin de un vector sobre el Eje Y de un sistema 3D)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo rotacion3dejey para hallar resultados de una rotacion en el Eje Y de un espacio 3D
% Se tienen un vector Px que va ha rotar sobre el eje X originando el vector Px1
% Se tienen un vector Pz que va ha rotar sobre el eje Z originando el vector Pz3
%
% Suponer que para un sistema de 3 dimensiones Px=[1 0 0]
% Suponer que para un sistema de 3 dimensiones Pz=[0 0 1]
%
% Puede trabajar igualmente con la funcion roty del Robotics toolbox de MATLAB
% Utiliza las funciones:
% circunferencia1 (Dibujar los angulos de rotacion)
% vector3d (Dibujar los vectores que rotan en el espacion 3D)
%
% Tipeando: rotacion3dejex(pi/4)
% Obtendra una rotacion del vector Px del Eje X y del vector Pz del Eje Z
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function rotacion3dejey(Angulo2)

Px = [1;0;0]; % Vector rotacion en el eje X del sistema de referencia


Pz = [0;0;1]; % Vector rotacion en el eje Z del sistema de referencia

p0 = [0;0;0]; % Coordenadas del punto de inicio comun p0 (Centro de coordenadas)


PX1 = [4;0;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PY1 = [0;4;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PZ1 = [0;0;4]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PX2 = [-4;0;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PY2 = [0;-4;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PZ2 = [0;0;-4]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)

% Giro en el eje Y del vector inicial Px y del vector Pz


for Theta2 = 0:0.01:Angulo2 % Declaramos a Theta2 de 0 hasta el valor de Angulo2 en espacios de 0.01
angulo2_rad = acos(cos(Theta2)); % Angulo en radianes
angulo2_grad = (angulo2_rad*360)/(2*pi); % Conversion del angulo en radianes a grados (Theta2)
Longitud2 = norm(Px); % Hallamos la norma del vector Puvw1
%Ry = [cos(Theta2) 0 -sin(Theta2);0 1 0;sin(Theta2) 0 cos(Theta2)]; % Matriz de rotacion en el eje Y en sentido opuesto agujas reloj
% Ry = [cos(Theta2) 0 sin(Theta2);0 1 0;-sin(Theta2) 0 cos(Theta2)]; % Matriz de rotacion en el eje Y en mismo sentido agujas del reloj
% Px1 = Ry*Px % Rotacion del vector Puvw1 en el eje X originando el vector Pyzx1
% Pz3 = Ry*Pz % Rotacion del vector Puvw2 en el eje Z originando el vector Pyzx2

Px1 = (roty(Theta2))*Px % Ecuacion que representa la rotacion en el eje X del vector Px


Pz3 = (roty(Theta2))*Pz % Ecuacion que representa la rotacion en el eje Z del vector Pz

vector3d(p0,Px,'r',1) % Graficamos el vector rotacion de inicio del desplazamiento del vector Px


hold on
vector3d(p0,Pz,'b',1) % Graficamos el vector rotacion de inicio del desplazamiento del vector Pz
hold on

vector3d(p0,PX1,'r',2) % Graficamos el vector del Eje X positivo


hold on
vector3d(p0,PY1,'g',2) % Graficamos el vector del Eje Y positivo
hold on
vector3d(p0,PZ1,'b',2) % Graficamos el vector del Eje Z positivo
hold on
vector3d(p0,PX2,'r',2) % Graficamos el vector del Eje X negativo
hold on
vector3d(p0,PY2,'g',2) % Graficamos el vector del Eje Y negativo
hold on
vector3d(p0,PZ2,'b',2) % Graficamos el vector del Eje Z negativo
hold on

% circunferencia3d(1,0,1,0.2,Theta2,'c',2) % Graficamos el angulo descrito por el giro del vector Px en el plano XZ


% hold on
circunferencia1(1,0,1,0,0,0,0.2,0,-Theta2,'r',2) % Graficamos el angulo descrito por el giro del vector Px en el plano XZ
hold on
circunferencia1(1,0,1,0,1,0,0.5,0,-Theta2*7,'g',2) % Graficamos una circunferencia de referencia de giro del Eje Y
hold on

vector3d(p0,Px1,'r',1) % Graficamos el desplazamiento del vector Px hasta su posicion final como vector Px1
hold on
vector3d(p0,Pz3,'b',1) % Graficamos el desplazamiento del vector Pz hasta su posicion final como vector Pz3

xlabel('EJE X','Color','r') % Dar nombre al eje X


ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas

title(['ROTACION: Eje Y',' ','Angulo Theta2 = ' num2str(angulo2_grad)]); % Declaramos un titulo con los resultados de los angulos
axis([-(Longitud2+1) (Longitud2+1) -(Longitud2+1) (Longitud2+1) -(Longitud2+1) (Longitud2+1)]); % Establece sistema ejes fijo del vector Px
pause(0.01)
end
end

Grafico de rotacion 3D sobre el Eje Y (Color verde) con los datos ingresados en la funcion rotacion3dejey
8. Lneas del algoritmo de la funcin: rotacion3dejez (Dibujar la rotacin de un vector sobre el Eje Z de un sistema 3D)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo rotacion3dejez para hallar resultados de una rotacion en el Eje Z de un espacio 3D
% Se tienen un vector Px que va ha rotar sobre el eje X originando el vector Px1
% Se tienen un vector Py que va ha rotar sobre el eje Z originando el vector Py2
%
% Suponer que para un sistema de 3 dimensiones Px=[1 0 0]
% Suponer que para un sistema de 3 dimensiones Py=[0 1 0]
%
% Puede trabajar igualmente con la funcion rotz del Robotics toolbox de MATLAB
% Utiliza las funciones:
% circunferencia1 (Dibujar los angulos de rotacion)
% vector3d (Dibujar los vectores que rotan en el espacion 3D)
%
% Tipeando: rotacion3dejez(pi/4)
% Obtendra una rotacion del vector Px del Eje X y del vector Py del Eje Y
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function rotacion3dejez(Angulo3)

Px = [1;0;0]; % Vector rotacion en el eje X del sistema de referencia


Py = [0;1;0]; % Vector rotacion en el eje Y del sistema de referencia

p0 = [0;0;0]; % Coordenadas del punto de inicio comun p0 (Centro de coordenadas)


PX1 = [4;0;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PY1 = [0;4;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PZ1 = [0;0;4]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PX2 = [-4;0;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PY2 = [0;-4;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PZ2 = [0;0;-4]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)

% Giro en el eje Z del vector inicial Px y del vector Py


for Theta3=0:0.01:Angulo3 % Declaramos a Theta3 de 0 hasta el valor de Angulo3 en espacios de 0.01
angulo2_rad = acos(cos(Theta3)); % Angulo en radianes
angulo2_grad = (angulo2_rad*360)/(2*pi); % Conversion del angulo en radianes a grados (Theta2)
Longitud3 = norm(Px); % Hallamos la norma del vector Pyzx1
%Rz = [cos(Theta3) sin(Theta3) 0;-sin(Theta3) cos(Theta3) 0;0 0 1]; % Matriz de rotacion en el eje Z en el sentido opuesto a las agujas
del reloj del espacio 3D
% Rz = [cos(Theta3) -sin(Theta3) 0;sin(Theta3) cos(Theta3) 0;0 0 1]; % Matriz de rotacion en el eje Z en el mismo sentido a las agujas del
reloj del espacio 3D
% Px1 = Rz*Px % Rotacion del vector Px en el eje X originando el vector Px1
% Py2 = Rz*Py % Rotacion del vector Py en el eje Y originando el vector Py2
Px1=(rotz(Theta3))*Px % Ecuacion con la funcion rotz semejante a la matriz Rz
Py2=(rotz(Theta3))*Py % Ecuacion con la funcion rotz semejante a la matriz Rz

vector3d(p0,PX1,'r',2) % Graficamos el vector del Eje X positivo


hold on
vector3d(p0,PY1,'g',2) % Graficamos el vector del Eje Y positivo
hold on
vector3d(p0,PZ1,'b',2) % Graficamos el vector del Eje Z positivo
hold on
vector3d(p0,PX2,'r',2) % Graficamos el vector del Eje X negativo
hold on
vector3d(p0,PY2,'g',2) % Graficamos el vector del Eje Y negativo
hold on
vector3d(p0,PZ2,'b',2) % Graficamos el vector del Eje Z negativo
hold on

vector3d(p0,Px,'r',1) % Graficamos el vector de inicio del desplazamiento del vector Px


hold on
vector3d(p0,Py,'g',1) % Graficamos el vector de inicio del desplazamiento del vector Py
hold on

circunferencia1(1,1,0,0,0,0,0.2,0,Theta3,'r',2) % Graficamos una circunferencia de referencia de giro del Eje Z


hold on
circunferencia1(1,1,0,0,0,1,0.5,0,Theta3*7,'b',2) % Graficamos una circunferencia de referencia de giro del Eje Z
hold on

vector3d(p0,Px1,'r',1) % Graficamos el desplazamiento del vector Px hasta su posicion final como vector Px1
hold on
vector3d(p0,Py2,'g',1) % Graficamos el desplazamiento del vector Py hasta su posicion final como vector Py2

xlabel('EJE X','Color','r') % Dar nombre al eje X


ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas
title(['ROTACION: Eje Y',' ','Angulo Theta3 = ' num2str(angulo2_grad)]); % Declaramos un titulo con los resultados de los angulos
axis([-(Longitud3+1) (Longitud3+1) -(Longitud3+1) (Longitud3+1) -(Longitud3+1) (Longitud3+1)]); % Establece sistema ejes fijo del vector Pz
pause(0.01)
end
end

Grafico de rotacion 3D sobre el Eje Z (Color azul) con los datos ingresados en la funcion rotacion3dejez
9. Lneas del algoritmo del programa: ROTACION3DEJESXYZN3 (Dibujar la rotacin secuencial de un vector sobre el Eje X
(Color rojo), el Eje Y (Color verde), y el Eje Z (Color azul)de un sistema 3D)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo ROTACION3DEJESXYZN3 para verificar una rotacion en los ejes X-Y-Z de un espacio 3D
% IMPORTANTE: Recordar que la matriz de rotacion general X-Y-Z en el mismo sentido a las agujas del reloj del espacio 3D
% se logra de la multiplicacion de matrices en el siguiente orden: Primero Z*Y - Segundo (Z*Y)*X Obteniendose una matriz de rotacion
% Se tienen un vector Puvw que va ha rotar sobre el eje X originando el vector Pxyz1
% Luego este vector girara sobre el eje Y originando el vector Pxyz2 y
% Finalmente hara un nuevo giro sobre el eje Z originando el vector Pxyz3
% Suponer que para un sistema de 3 dimensiones Puvw=[1 0 0] con Theta1=90 (Primer giro) Theta2=90 (Segundo giro) Theta3=45 (Tercer giro).
% Encontrar en forma grfica las coordenadas con respecto al sistema xyz.
% Solucion 1: Para Theta=90 se debe obtener Pxyz1=[0 0 1]
% Solucion 2: Para Theta=45 se debe obtener Pxyz2=[1 0 0]
% Solucion 3: Para Theta=90 se debe obtener Pxyz3=[0.7 0.7 0]. Este es resultado de la posicion final del vector
% Importante este archivo se usa con la funcion vector3d para n vectores en 3D
% Puede trabajar igualmente con las funciones rotx roty rotz del Robotics toolbox de MATLAB
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear; % Limpiamos el Workspace


clc; % Limpiamos el Command Window

Puvw=[0;1;0]; % Coordenadas punto final del primer vector en el sistema de referencia uvw
p0 = [0;0;0]; % Coordenadas punto inicial del primer vector de inicio (Centro de coordenadas)
Angulo1 = pi/2; % Primer angulo a girar (90)
Angulo2 = pi/2; % Segundo angulo a girar (90)
Angulo3 = pi/4; % Tercer angulo a girar (45)

% Primer giro en el eje X del vector inicial Puvw


for Theta1=0:0.01:Angulo1 % Declaramos a Theta1 de 0 a 90 en espacios de 0.01
angulo1_rad = acos(cos(Theta1)); % Angulo en radianes
angulo1_grad = (angulo1_rad*360)/(2*pi); % Conversion del angulo en radianes a grados (Theta1)
%Rx = [1 0 0;0 cos(Theta1) sin(Theta1);0 -sin(Theta1) cos(Theta1)]; % Matriz de rotacion en el eje X en el sentido opuesto a las agujas del reloj del espacio 3D
% Rx = [1 0 0;0 cos(Theta1) -sin(Theta1);0 sin(Theta1) cos(Theta1)]; % Matriz de rotacion en el eje X en el mismo sentido a las agujas del reloj del espacio 3D
% Pxyz1 = Rx*Puvw % Rotacion del vector Pyxz1 en el eje X originando el vector Pyxz2
Pxyz1 = (rotx(Theta1))*Puvw % Ecuacion con la funcion rotx semejante a la matriz Rx
Longitud_u = norm(Puvw); % Hallamos la norma del vector Puvw
Longitud1 = norm(Pxyz1); % Hallamos la norma del vector Pxyz1

vector3d(p0,Puvw,'r',1) % Graficamos la posicion inicial del vector Puvw


hold on
circunferencia3d(1,1,0,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano XY
hold on
circunferencia3d(1,0,1,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano XZ
hold on
circunferencia3d(0,1,1,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano YZ
hold on
vector3d(p0,Pxyz1,'r',1) % Graficamos el desplazamiento del vector Puvw hasta su posicion final como vector Pyxz1
xlabel('EJE X','Color','r') % Dar nombre al eje X
ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas
title(['ROTACION: XYZ',' ','Angulo Theta1 = ' num2str(angulo1_grad)]); % Declaramos un titulo con los resultados de los angulos
axis([-Longitud1 Longitud1 -Longitud1 Longitud1 -Longitud1 Longitud1]); % Establecemos un sistema de ejes fijo para el vector Puvw
pause(0.01)

end

pause(0.1)
% Segundo giro en el eje Y del vector inicial Pxyz1
for Theta2=0:0.01:Angulo2
angulo2_rad = acos(cos(Theta2)); % Angulo en radianes
angulo2_grad = (angulo2_rad*360)/(2*pi); % Conversion del angulo en radianes a grados (Theta2)
%Ry = [cos(Theta2) 0 -sin(Theta2);0 1 0;sin(Theta2) 0 cos(Theta2)]; % Matriz de rotacion en el eje Y en el sentido opuesto a las agujas del reloj del espacio 3D
% Ry = [cos(Theta2) 0 sin(Theta2);0 1 0;-sin(Theta2) 0 cos(Theta2)]; % Matriz de rotacion en el eje Y en el mismo sentido a las agujas del reloj del espacio 3D
% Pxyz2 = Ry*Pxyz1 % Rotacion del vector Puvw en el eje Y originando el vector Pyxz1
Pxyz2 = (roty(Theta2))*Pxyz1 % Ecuacion con la funcion roty semejante a la matriz Ry
Longitud2 = norm(Pxyz2); % Hallamos la norma del vector Pyxz2

vector3d(p0,Puvw,'r',1) % Graficamos la posicion inicial del vector Puvw


hold on
circunferencia3d(1,1,0,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano XY
hold on
circunferencia3d(1,0,1,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano XZ
hold on
circunferencia3d(0,1,1,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano YZ
hold on
vector3d(p0,Pxyz1,'g',1) % Graficamos la posicion inicial del vector Pyxz1
hold on
vector3d(p0,Pxyz2,'g',1) % Graficamos el desplazamiento del vector Pyxz1 hasta su posicion final como vector Pyxz2
xlabel('EJE X','Color','r') % Dar nombre al eje X
ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas
% Declaramos un titulo con los resultados de los angulos
title(['ROTACION: XYZ',' ','Angulo Theta1 = ' num2str(angulo1_grad),' ','Angulo Theta2 = ' num2str(angulo2_grad)]);
axis([-Longitud2 Longitud2 -Longitud2 Longitud2 -Longitud2 Longitud2]); % Establecemos un sistema de ejes fijo para el vector Puvw
pause(0.01)

end

pause(0.1)
% Tercer giro en el eje Z del vector inicial Pxyz2
for Theta3=0:0.01:Angulo3
angulo3_rad = acos(cos(Theta3)); % Angulo en radianes
angulo3_grad = (angulo3_rad*360)/(2*pi); % Conversion del angulo en radianes a grados (Theta3)
%Rz = [cos(Theta3) sin(Theta3) 0;-sin(Theta3) cos(Theta3) 0;0 0 1]; % Matriz de rotacion en el eje Z en el sentido opuesto a las agujas del reloj del espacio 3D
% Rz = [cos(Theta3) -sin(Theta3) 0;sin(Theta3) cos(Theta3) 0;0 0 1]; % Matriz de rotacion en el eje Z en el mismo sentido a las agujas del reloj del espacio 3D
% Pxyz3 = Rz*Pxyz2 % Rotacion del vector Pyxz2 en el eje Z originando el vector Pyxz3
Pxyz3 = (rotz(Theta3))*Pxyz2 % Ecuacion con la funcion rotx semejante a la matriz Rz
Longitud3 = norm(Pxyz3); % Hallamos la norma del vector Pxyz3

vector3d(p0,Puvw,'r',1) % Graficamos la posicion inicial del vector Puvw


hold on
circunferencia3d(1,1,0,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano XY
hold on
circunferencia3d(1,0,1,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano XZ
hold on
circunferencia3d(0,1,1,0.2,2*pi,'c',1) % Graficamos una circunferencia pequea de referencia en el plano YZ
hold on
vector3d(p0,Pxyz1,'g',1) % Graficamos la posicion inicial del vector Pyxz1
hold on
vector3d(p0,Pxyz2,'b',1) % Graficamos la posicion inicial del vector Pyxz2
hold on
vector3d(p0,Pxyz3,'b',1) % Graficamos el desplazamiento del vector Pyxz3 hasta su posicion final como vector Pyxz2
xlabel('EJE X','Color','r') % Dar nombre al eje X
ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas
% Declaramos un titulo con los resultados de los angulos
title(['ROTACION: XYZ',' ','Angulo Theta1 = ' num2str(angulo1_grad),' ','Angulo Theta2 = ' num2str(angulo2_grad),' ','Angulo Theta3 = '
num2str(angulo3_grad)]);

Longitud_u = norm(Puvw) % Hallamos la norma del vector Puvw


Longitud1 = norm(Pxyz1) % Hallamos la norma del vector Pxyz1
Longitud2 = norm(Pxyz2) % Hallamos la norma del vector Pyxz2
Longitud3 = norm(Pxyz3) % Hallamos la norma del vector Pxyz3

axis([-Longitud3 Longitud3 -Longitud3 Longitud3 -Longitud3 Longitud3]); % Establecemos un sistema de ejes fijo para el vector Puvw
pause(0.01)

end

Grafico de la primera rotacion de un vector 3D (Color rojo) con los datos del programa ROTACION3DEJESXYZN3
Grafico de la segunda rotacion de un vector 3D (Color verde) con los datos del programa ROTACION3DEJESXYZN3

Grafico de la tercera rotacion de un vector 3D (Color azul) con los datos del programa ROTACION3DEJESXYZN3