MATLAB
ROTACIONES EN EL ESPACIO 3D DE LOS ANGULOS DE EULER Funciones y programas para diferentes rotaciones 3D
Autor:
Ingeniero Electrónico: Monteza Zevallos Fidel Tomas Setiembre de 2016 (Primera Edición)
V. J. M. J. / A. M. M. J.
Índice general Introducción 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. Líneas del algoritmo de la función: vector3d (Vector en tres dimension es) 5. Líneas del algoritmo de la función: circunferencia1 (Dibujar los ángulo s de rotación) 6. Líneas del algoritmo de la función: rotacion3dejex (Dibujar la rotación de un vector sobre el Eje X de un sistema 3D) 7. Líneas del algoritmo de la función: rotacion3dejey (Dibujar la rotación de un vector sobre el Eje Y de un sistema 3D) 8. Líneas del algoritmo de la función: rotacion3dejez (Dibujar la rotación de un vector sobre el Eje Z de un sistema 3D) 9. Líneas del algoritmo del programa: ROTACION3DEJESXYZN3 (Dibujar la rotación secuencial de un vector sobre el Eje X, el Eje Y, y el Eje Z de un sistema 3D)
Introducción Los ángulos de Euler constituyen constituyen un conjunto de tres coordenadas angulares que sirven para especificar la orientación de un sistema de referencia de ejes ortogonales, normalmente móvil, respecto a otro sistema de referencia de ejes ortogonales normalmente fijos. Fueron introducidos por Leonhard Euler en mecánica del sólido rígido para describir la orientación de un sistema de referencia solidario con un sólido
rígido en movimiento. Dados dos sistemas de coordenadas xyz y y XYZ con con origen común, es posible especif icar la posición de un sis tema en términos del otro usando tres ángulos α, β y γ. La definición matemática es estática y se basa en escoger dos planos, uno en el sistema de referencia y otro en el triedro rotado. En el esquema adjunto serían los planos xy y XY. Escogiendo otros planos se obtendrían distintas convenciones alternativas, las cuales se llaman de Tait-Bryan cuando los planos de referencia son no-homogéneos (por ejemplo, xy y XY son homogéneos, mientras xy y XZ no lo son). La intersección de los planos coordenados xy y y XY escogidos escogidos se llama línea de nodos, y se usa para definir los tres ángulos: α es el ángulo entre el eje x y y la línea de nodos. β es el ángulo entre el eje z y y el eje Z . γ es el ángulo entre la línea de nodos y el eje X .
Dos sistemas de coordenadas ortogonales en el q ue se muestran los ángulos de Euler
Más adelante se establecerá que los tres ángulos de Euler descritos son los valores de las tres rotaciones intrínsecas que describen el sistema.
1.- Rotaciones con respecto a los ejes X, Y y Z En tres dimensiones se p ueden hacer tres rotaciones:
-
Rotación en OX Rotación en OY Rotación en OZ
2.- Matrices de giro con ángulos de Euler en el mismo sentido de las agujas del reloj
0 −0 100
Matriz de giro en el Eje X
0 01 0 − 0
− 0 0 0 0 1
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
0 001 − 0
Matriz de giro en el Eje X
0 − 0 10 0
Matriz de giro en el Eje Y
0 − 0 0 0 1
Matriz de giro en el Eje Z
4. Líneas del algoritmo de la función: vector3d (Vector en tres dimension es) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% % 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) 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, vector3d(p0,p1,color,ancho) ancho) %Con estas lineas se podra lograr la grafica de vectores en un sistema 3D (x,y,z) if max(size(p0))==3 if max(size(p0))==3 % El maximo tamaño de valores de p0 (x0,y0,z0) debe ser 3 (Representa el punto inicial del vector 3D) if max(size(p1))==3 if max(size(p1))==3 % El maximo tamaño 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); 'LineWidth',ancho); % Se grafica una linea entre el punto p0 y el punto p1 p = p1-p0; alpha = 0.07; beta = 0.2;
% Restamos los valores del punto final (p1) menos los valores del punto inicial (p0) % Tamaño de la cabeza de flecha relativo a la longitud del vector % Ancho de la base de la cabeza de flecha relativo a su longitud
hu = [x1-alpha*(p(1)+bet [x1-alpha*(p(1)+beta*(p(2)+eps)); a*(p(2)+eps)); x1; x1-alpha*(p(1)-beta* x1-alpha*(p(1)-beta*(p(2)+eps))]; (p(2)+eps))]; hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))]; y1-alpha*(p(2)+beta*(p(1)+eps))];
hw = [z1-alpha*p(3);z1;z [z1-alpha*p(3);z1;z1-alpha*p(3)]; 1-alpha*p(3)]; hold on % Mantenemos el grafico de de la linea que represnta al vector 3D plot3(hu(:),hv(:),hw(:),color,'LineWidth' 'LineWidth',ancho) ,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 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 elseif max(size(p0))==2 % El maximo tamaño de valores de p0 (x0,y0) debe ser 2 (Representa el punto inicial del vector 2D) if max(size(p1))==2 if max(size(p1))==2 % El maximo tamaño 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' 'LineWidth',ancho); ,ancho); % Se grafica una linea entre el punto p0 y el punto p1 p = p1-p0; alpha = 0.1; beta = 0.1;
% Restamos los valores del punto final (p1) menos los valores del punto inicial (p0) % Tamaño de la cabeza de flecha relativo a la longitud del vector % Ancho de la base de la cabeza de flecha relativo a su longitud
hu = [x1-alpha*(p(1)+bet [x1-alpha*(p(1)+beta*(p(2)+eps)); a*(p(2)+eps)); x1; x1-alpha*(p(1)-beta* x1-alpha*(p(1)-beta*(p(2)+eps))]; (p(2)+eps))]; hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))]; y1-alpha*(p(2)+beta*(p(1)+eps))]; hold on plot(hu(:),hv(:),color,'LineWidth' 'LineWidth',ancho) ,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 error('p0 y p1 deben tener las mismas dimensiones') end else error('ATENCION: error('ATENCION: Esta funcion solo acepta vectores 2D o 3D') end
% ALERTA para solo aceptar que p0 y p1 seab de igual extension % ALERTA que indica los dos tipos de sistemas vectoriales a graficar
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. Líneas del algoritmo de la función: circunferencia1 (Dibujar los ángulo s de rotación) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %% % 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 circunferencia1(1,1,0,0,0,1,2,0,2*pi,'b' ,0,0,0,1,2,0,2*pi,'b',5) ,5) Se graficara la circunferencia circunferencia color azul azul en el plano XY (El Eje Z puede tener cualquier cualquier valor) % circunferencia1(1,0 circunferencia1(1,0,1,0,1,0,2,0,2*pi,'g' ,1,0,1,0,2,0,2*pi,'g',5) ,5) Se graficara la circunferencia circunferencia color verde verde en el plano XZ (El Eje Y puede tener cualquier cualquier valor) % circunferencia1(0,1 circunferencia1(0,1,1,1,0,0,2,0,2*pi,'r' ,1,1,0,0,2,0,2*pi,'r',5) ,5) Se graficara la circunferencia circunferencia color rojo rojo en el plano YZ (El Eje X puede tener cualquier cualquier valor) % %INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %% function circunferencia1(punto circunferencia1(puntox,puntoy,puntoz,x,y, x,puntoy,puntoz,x,y,z,radio,angulo1,angul z,radio,angulo1,angulo2,color,ancho) o2,color,ancho) r = radio; Theta1 = angulo1; Theta2 = angulo2;
% Valor del radio de la circunferencia % Valor del angulo descrito durante el giro % Valor del angulo descrito durante el giro
if puntoz if puntoz == 0 & puntoy == 1 & puntox == 1 h = x; i = y; j = z;
% % % %
Graficamos el Valor del Eje Valor del Eje Valor del Eje
t = Theta1:Theta2/20:T Theta1:Theta2/20:Theta2; heta2; Eje_x = h+r*cos(t); Eje_y = i+r*sin(t); Eje_z = j+0*sin(t);
% % % %
Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20 La variable Eje_x es el valor inicial del grafico en el Eje X La variable Eje_y es el valor inicial del grafico en el Eje Y Aqui el eje Z es cero
if puntoz if puntoz == 1 & puntoy == 0 & puntox == 1 h = x; i = y; j = z;
% % % %
Graficamos el Valor del Eje Valor del Eje Valor del Eje
t = Theta1:Theta2/20:T Theta1:Theta2/20:Theta2; heta2; Eje_x = h+r*cos(t); Eje_y = i+0*sin(t); Eje_z = j+r*sin(t);
% % % %
Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20 La variable Eje_x es el valor inicial del grafico en el Eje X Aqui el eje Y es cero La variable Eje_z es el valor inicial del grafico en el Eje Z
circulo en el plano X (Punto central de Y (Punto central de Z (Punto central de
XY la la la
(El Eje Z puede tener cualquier valor) circunferencia) circunferencia) circunferencia)
end
end
circulo en el plano X (Punto central de Y (Punto central de Z (Punto central de
XZ la la la
(El Eje Y puede tener cualquier valor) circunferencia) circunferencia) circunferencia)
if puntoz if puntoz == 1 & puntoy == 1 & puntox == 0 h = x; i = y; j = z;
% % % %
Graficamos el Valor del Eje Valor del Eje Valor del Eje
circulo en el plano X (Punto central de Y (Punto central de Z (Punto central de
YZ la la la
(El Eje X puede tener cualquier valor) circunferencia) circunferencia) circunferencia)
t = Theta1:Theta2/20:T Theta1:Theta2/20:Theta2; heta2; Eje_x = h+0*sin(t); Eje_y = i+r*cos(t); Eje_z = j+r*sin(t);
% % % %
Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20 Aqui el eje X es cero La variable Eje_y es el valor inicial del grafico en el Eje Y La variable Eje_z es el valor inicial del grafico en el Eje Z
end plot3(h,i,j,'o' 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' 'LineWidth',ancho) ,ancho) % Graficar la circunferencia en las coordenadas X Y Z grid on axis square xlabel('EJE xlabel('EJE X', X','Color' 'Color', ,'r' 'r') ) ylabel('EJE ylabel('EJE Y', Y','Color' 'Color', ,'g' 'g') ) zlabel('EJE zlabel('EJE Z', Z','Color' 'Color', ,'b' 'b') )
% % % %
Adaptar que la figura salga en un cuadrado Dar nombre al eje X Dar nombre al eje Y Dar nombre al eje Z
end
Grafico de una circunferencia con los datos i ngresados en la funcion circunferencia1
6. Líneas del algoritmo de la función: rotacion3dejex (Dibujar la rotación 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) 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(Angulo rotacion3dejex(Angulo1) 1) Py = [0;1;0]; Pz = [0;0;1];
% Vector rotacion en el eje Y del sistema de referencia % Vector rotacion en el eje Z del sistema de referencia
p0 = [0;0;0]; PX1 = [4;0;0]; PY1 = [0;4;0]; PZ1 = [0;0;4]; PX2 = [-4;0;0]; PY2 = [0;-4;0]; PZ2 = [0;0;-4];
% % % % % % %
Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas
del del del del del del del
punto punto punto punto punto punto punto
de inicio comun p0 (Centro de coordenadas) final positivo comun a p0 (Centro de coordenadas) final positivo comun a p0 (Centro de coordenadas) final positivo comun a p0 (Centro de coordenadas) final negativo comun a p0 (Centro de coordenadas) final negativo comun a p0 (Centro de coordenadas) 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:Angu Theta1=0:0.01:Angulo1 lo1 % 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 (angulo1_rad*360)/(2*pi); *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) cos(Theta1) sin(Theta1);0 sin(Theta1);0 -sin(Theta1) cos(Theta1)]; cos(Theta1)]; % Matriz de rotacion rotacion en el eje X en el sentido opuesto a las agujas del reloj del espacio 3D % Rx = [1 0 0;0 cos(Theta1) cos(Theta1) -sin(Theta1);0 -sin(Theta1);0 sin(Theta1) cos(Theta1)]; % Matriz de rotacion 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' 'r',2) ,2) hold on vector3d(p0,PY1,'g' 'g',2) ,2) hold on vector3d(p0,PZ1,'b' 'b',2) ,2) hold on
% Graficamos el vector del Eje X positivo % Graficamos el vector del Eje Y positivo % Graficamos el vector del Eje Z positivo
% %
vector3d(p0,PX2,'r' vector3d(p0,PX2, 'r',2) ,2) hold on vector3d(p0,PY2,'g' 'g',2) ,2) hold on vector3d(p0,PZ2,'b' 'b',2) ,2) hold on
% Graficamos el vector del Eje X negativo
vector3d(p0,Py,'g' 'g',1) ,1) hold on vector3d(p0,Pz,'b' 'b',1) ,1) hold on
% Graficamos el vector de inicio del desplazamiento del vector Py
% Graficamos el vector del Eje Y negativo % Graficamos el vector del Eje Z negativo
% Graficamos el vector de inicio del desplazamiento del vector Pz
circunferencia1(0,1,1,0,0,0,0.2,0,Theta1, 'g',2) % Graficamos una circunferencia de referencia de giro del Eje Y 'g',2) hold on circunferencia2(0,1,1,0,0,0,0.2,pi/2,pi,'b circunferencia2(0,1, 1,0,0,0,0.2,pi/2,pi,'b',2) ',2) % Graficamos una circunferencia circunferencia de referencia 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 'r',2) hold on vector3d(p0,Py2,'g' 'g',1) ,1) hold on vector3d(p0,Pz3,'b' 'b',1) ,1)
% Graficamos el vector Py2 % Graficamos el vector Pz3
xlabel('EJE xlabel('EJE X', X','Color' 'Color', ,'r' 'r') ) % Dar nombre al eje X ylabel('EJE ylabel('EJE Y', Y','Color' 'Color', ,'g' 'g') ) % Dar nombre al eje Y zlabel('EJE zlabel('EJE Z', Z','Color' 'Color', ,'b' 'b') ) % Dar nombre al eje Z grid on % Activamos las rejillas title(['ROTACION: title(['ROTACION: Eje X', X',' ','Angulo Theta1 = ' num2str(angulo1_grad) num2str(angulo1_grad)]); ]); % Declaramos un titulo con los resultados de los angulos axis([-(Longitud1+1) 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. Líneas del algoritmo de la función: rotacion3dejey (Dibujar la rotación 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) 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(Angulo rotacion3dejey(Angulo2) 2) Px = [1;0;0]; Pz = [0;0;1]; p0 = [0;0;0]; PX1 = [4;0;0]; PY1 = [0;4;0]; PZ1 = [0;0;4]; PX2 = [-4;0;0]; PY2 = [0;-4;0]; PZ2 = [0;0;-4];
% Vector rotacion en el eje X del sistema de referencia % Vector rotacion en el eje Z del sistema de referencia % Coordenadas del punto de inicio comun p0 (Centro de coordenadas) % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas) % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas) % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas) % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas) % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas) % 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 for Theta2 = 0:0.01:Angulo2 % Declaramos a Theta2 de 0 hasta el valor de Angulo2 en angulo2_rad = acos(cos(Theta2)); % Angulo en radianes angulo2_grad = (angulo2_rad*360)/(2 (angulo2_rad*360)/(2*pi); *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)]; cos(Theta2)]; % Matriz de rotacion rotacion en el % Ry = [cos(Theta2) 0 sin(Theta2);0 sin(Theta2);0 1 0;-sin(Theta2) 0 cos(Theta2)]; cos(Theta2)]; % Matriz de rotacion rotacion en el % Px1 = Ry*Px % Rotacion del vector Puvw1 % Pz3 = Ry*Pz % Rotacion del vector Puvw2
espacios de 0.01
eje Y eje Y en el en el
en sentido sentido opuesto agujas reloj reloj en mismo sentido sentido agujas del reloj eje X originando el vector Pyzx1 eje Z originando el vector Pyzx2
Px1 = (roty(Theta2))*Px Pz3 = (roty(Theta2))*Pz
% Ecuacion que representa la rotacion en el eje X del vector Px % Ecuacion que representa la rotacion en el eje Z del vector Pz
vector3d(p0,Px,'r' 'r',1) ,1) hold on vector3d(p0,Pz,'b' 'b',1) ,1) hold on
% Graficamos el vector rotacion de inicio del desplazamiento del vector Px
vector3d(p0,PX1,'r' 'r',2) ,2) hold on
% Graficamos el vector del Eje X positivo
% Graficamos el vector rotacion de inicio del desplazamiento del vector Pz
% %
vector3d(p0,PY1,'g' vector3d(p0,PY1, 'g',2) ,2) hold on vector3d(p0,PZ1,'b' 'b',2) ,2) hold on vector3d(p0,PX2,'r' 'r',2) ,2) hold on vector3d(p0,PY2,'g' 'g',2) ,2) hold on vector3d(p0,PZ2,'b' 'b',2) ,2) hold on
% Graficamos el vector del Eje Y positivo % Graficamos el vector del Eje Z positivo % Graficamos el vector del Eje X negativo % Graficamos el vector del Eje Y negativo % Graficamos el vector del Eje Z negativo
circunferencia3d(1,0,1,0.2,Theta2,'c',2) % Graficamos circunferencia3d(1,0,1,0.2,Theta2,'c',2) Graficamos el el angulo angulo descrito descrito por por el giro del vector vector Px en el 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 'r',2) 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 'g',2) hold on vector3d(p0,Px1,'r' 'r',1) ,1) hold on vector3d(p0,Pz3,'b' 'b',1) ,1)
% Graficamos el desplazamiento del vector Px hasta su posicion final como vector Px1
xlabel('EJE xlabel('EJE X', X','Color' 'Color', ,'r' 'r') ) ylabel('EJE ylabel('EJE Y', Y','Color' 'Color', ,'g' 'g') ) zlabel('EJE zlabel('EJE Z', Z','Color' 'Color', ,'b' 'b') ) grid on
% % % %
% Graficamos el desplazamiento del vector Pz hasta su posicion final como vector Pz3 Dar nombre al Dar nombre al Dar nombre al Activamos las
eje X eje Y eje Z rejillas
title(['ROTACION: title(['ROTACION: Eje Y', Y',' ','Angulo Theta2 = ' num2str(angulo2_grad) num2str(angulo2_grad)]); ]); % Declaramos un titulo con los resultados de los angulos axis([-(Longitud2+1) 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 d atos ingresados en la funcion rotacion3dejey
8. Líneas del algoritmo de la función: rotacion3dejez (Dibujar la rotación 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) 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(Angulo rotacion3dejez(Angulo3) 3) Px = [1;0;0]; Py = [0;1;0];
% Vector rotacion en el eje X del sistema de referencia % Vector rotacion en el eje Y del sistema de referencia
p0 = [0;0;0]; PX1 = [4;0;0]; PY1 = [0;4;0]; PZ1 = [0;0;4]; PX2 = [-4;0;0]; PY2 = [0;-4;0]; PZ2 = [0;0;-4];
% % % % % % %
Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas Coordenadas
del del del del del del del
punto punto punto punto punto punto punto
de inicio comun p0 (Centro de coordenadas) final positivo comun a p0 (Centro de coordenadas) final positivo comun a p0 (Centro de coordenadas) final positivo comun a p0 (Centro de coordenadas) final negativo comun a p0 (Centro de coordenadas) final negativo comun a p0 (Centro de coordenadas) 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:Angu Theta3=0:0.01:Angulo3 lo3 % 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 (angulo2_rad*360)/(2*pi); *pi); % Conversion del angulo en radianes a grados (Theta2) Longitud3 = norm(Px); % Hallamos la norma del vector Pyzx1 %Rz = [cos(Theta3) [cos(Theta3) sin(Theta3) sin(Theta3) 0;-sin(Theta3) cos(Theta3) 0;0 0 1]; % Matriz de rotacion en el eje Z en en el sentido opuesto a las las agujas del reloj del espacio 3D % Rz = [cos(Theta3) -sin(Theta3) 0;sin(Theta3) cos(Theta3) 0;0 0 1]; % Matriz 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' 'r',2) ,2) hold on vector3d(p0,PY1,'g' 'g',2) ,2) hold on vector3d(p0,PZ1,'b' 'b',2) ,2)
% Graficamos el vector del Eje X positivo % Graficamos el vector del Eje Y positivo % Graficamos el vector del Eje Z positivo
hold on vector3d(p0,PX2,'r' 'r',2) ,2) hold on vector3d(p0,PY2,'g' 'g',2) ,2) hold on vector3d(p0,PZ2,'b' 'b',2) ,2) hold on vector3d(p0,Px,'r' 'r',1) ,1) hold on vector3d(p0,Py,'g' 'g',1) ,1) hold on
% Graficamos el vector del Eje X negativo % Graficamos el vector del Eje Y negativo % Graficamos el vector del Eje Z negativo % Graficamos el vector de inicio del desplazamiento del vector Px % Graficamos el vector de inicio del desplazamiento del vector Py
circunferencia1(1,1,0,0,0,0,0.2,0,Theta3, 'r',2) % Graficamos una circunferencia de referencia de giro del Eje Z 'r',2) 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 'b',2) hold on vector3d(p0,Px1,'r' 'r',1) ,1) hold on vector3d(p0,Py2,'g' 'g',1) ,1)
% Graficamos el desplazamiento del vector Px hasta su posicion final como vector Px1 % Graficamos el desplazamiento del vector Py hasta su posicion final como vector Py2
xlabel('EJE xlabel('EJE X', X','Color' 'Color', ,'r' 'r') ) % Dar nombre al eje X ylabel('EJE ylabel('EJE Y', Y','Color' 'Color', ,'g' 'g') ) % Dar nombre al eje Y zlabel('EJE zlabel('EJE Z', Z','Color' 'Color', ,'b' 'b') ) % Dar nombre al eje Z grid on % Activamos las rejillas title(['ROTACION: title(['ROTACION: Eje Y', Y',' ','Angulo Theta3 = ' num2str(angulo2_grad) num2str(angulo2_grad)]); ]); % Declaramos un titulo con los resultados de los angulos axis([-(Longitud3+1) 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. Líneas del algoritmo del programa: ROTACION3DEJESXYZN3 (Dibujar la rotación secuencial de un vector sobre el Eje X (Color rojo), el Eje Y (Color verde), y el Eje Z (Color azul)de u n 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° Theta2=90° (Segundo giro) Theta3=45° (Tercer giro). % Encontrar en forma gráfica 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; clc;
% Limpiamos el Workspace % Limpiamos el Command Window
Puvw=[0;1;0]; p0 = [0;0;0]; Angulo1 = pi/2; Angulo2 = pi/2; Angulo3 = pi/4;
% % % % %
Coordenadas punto final del primer vector en el sistema de referencia uvw Coordenadas punto inicial del primer vector de inicio (Centro de coordenadas) Primer angulo a girar (90°) Segundo angulo a girar (90°) Tercer angulo a girar (45°)
% Primer giro en el eje X del vector inicial Puvw for 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_grad = (angulo1_rad*360)/(2*pi) (angulo1_rad*360)/(2*pi); ; % Conversion del angulo en radianes a grados (Theta1) %Rx = [1 0 0;0 cos(Theta1) sin(The ta1);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(Theta 1)]; % 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' vector3d(p0,Puvw, 'r',1) ,1) % Graficamos la posicion inicial del vector Puvw hold on circunferencia3d(1,1,0,0.2,2*pi, 'c' 'c',1) ,1) % Graficamos una circunferencia pequeña de referencia en el plano XY hold on circunferencia3d(1,0,1,0.2,2*pi, 'c' 'c',1) ,1) % Graficamos una circunferencia pequeña de referencia en el plano XZ hold on circunferencia3d(0,1,1,0.2,2*pi, 'c' 'c',1) ,1) % Graficamos una circunferencia pequeña de referencia en el plano YZ hold on vector3d(p0,Pxyz1, 'r' 'r',1) ,1) % Graficamos el desplazamiento del vector Puvw hasta su posicion final como vector Pyxz1 xlabel('EJE xlabel('EJE X', X' ,'Color' 'Color', ,'r' 'r') ) % Dar nombre al eje X ylabel('EJE ylabel('EJE Y', Y' ,'Color' 'Color', ,'g' 'g') ) % Dar nombre al eje Y zlabel('EJE zlabel('EJE Z', Z' ,'Color' 'Color', ,'b' 'b') ) % Dar nombre al eje Z grid on % Activamos las rejillas title(['ROTACION: title(['ROTACION: XYZ' ,' ','Angulo Theta1 = ' num2str(angulo1_grad)]); % Declaramos un titulo con los resultados de los angulos axis([-Longitud1 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 Theta2=0:0.01:Angulo2 angulo2_rad = acos(cos(Theta2)); % Angulo en radianes angulo2_grad angulo2_grad = (angulo2_rad*360)/(2*pi) (angulo2_rad*360)/(2*pi); ; % Conversion del angulo en radianes a grados (Theta2) %Ry = [cos(Theta2) 0 -sin(Theta2);0 1 0;sin(Thet a2) 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(Theta 2) 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' vector3d(p0,Puvw, 'r',1) ,1) % Graficamos la posicion inicial del vector Puvw hold on circunferencia3d(1,1,0,0.2,2*pi, 'c' 'c',1) ,1) % Graficamos una circunferencia pequeña de referencia en hold on circunferencia3d(1,0,1,0.2,2*pi, 'c' 'c',1) ,1) % Graficamos una circunferencia pequeña de referencia en hold on circunferencia3d(0,1,1,0.2,2*pi, 'c' 'c',1) ,1) % Graficamos una circunferencia pequeña de referencia en hold on vector3d(p0,Pxyz1, 'g' 'g',1) ,1) % Graficamos la posicion inicial del vector Pyxz1 hold on vector3d(p0,Pxyz2, 'g' 'g',1) ,1) % Graficamos el desplazamiento del vector Pyxz1 hasta su xlabel('EJE xlabel('EJE X', X' ,'Color' 'Color', ,'r' 'r') ) % Dar nombre al eje X ylabel('EJE ylabel('EJE Y', Y' ,'Color' 'Color', ,'g' 'g') ) % Dar nombre al eje Y zlabel('EJE zlabel('EJE Z', Z' ,'Color' 'Color', ,'b' 'b') ) % Dar nombre al eje Z grid on % Activamos las rejillas % Declaramos un titulo con los resultados de los angulos title(['ROTACION: title(['ROTACION: XYZ' ,' ','Angulo Theta1 = ' num2str(angulo1_grad), ' ','Angulo Theta2 = ' num2str(angulo2_grad)]); num2str(angulo2_grad)]); axis([-Longitud2 axis([-Longitud2 Longitud2 -Longitud2 Longitud2 -Longitud2 Longitud2]); % Establecemos un sistema de ejes fijo para el vector pause(0.01)
el plano XY el plano XZ el plano YZ
posicion final como vector Pyxz2
Puvw
end pause(0.1) % Tercer giro en el eje Z del vector inicial Pxyz2 for Theta3=0:0.01:Angulo3 Theta3=0:0.01:Angulo3 angulo3_rad = acos(cos(Theta3)); % Angulo en radianes angulo3_grad angulo3_grad = (angulo3_rad*360)/(2*pi) (angulo3_rad*360)/(2*pi); ; % Conversion del angulo en radianes a grados (Theta3) %Rz = [cos(Theta3) sin(Theta3) 0;-si n(Theta3) cos(Thet a3) 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' vector3d(p0,Puvw, 'r',1) ,1) hold on circunferencia3d(1,1,0,0.2,2*pi, 'c' 'c',1) ,1) hold on circunferencia3d(1,0,1,0.2,2*pi, 'c' 'c',1) ,1) hold on circunferencia3d(0,1,1,0.2,2*pi, 'c' 'c',1) ,1) hold on vector3d(p0,Pxyz1, 'g' 'g',1) ,1) hold on vector3d(p0,Pxyz2, 'b' 'b',1) ,1) hold on vector3d(p0,Pxyz3, 'b' 'b',1) ,1) xlabel('EJE xlabel('EJE X', X' ,'Color' 'Color', ,'r' 'r') ) ylabel('EJE ylabel('EJE Y', Y' ,'Color' 'Color', ,'g' 'g') ) zlabel('EJE zlabel('EJE Z', Z' ,'Color' 'Color', ,'b' 'b') ) grid on % Declaramos un titulo con los resultados de los angulos
% Graficamos la posicion inicial del vector Puvw % Graficamos una circunferencia pequeña de referencia en el plano XY % Graficamos una circunferencia pequeña de referencia en el plano XZ % Graficamos una circunferencia pequeña de referencia en el plano YZ % Graficamos la posicion inicial del vector Pyxz1 % Graficamos la posicion inicial del vector Pyxz2 % % % % %
Graficamos el Dar nombre al Dar nombre al Dar nombre al Activamos las
desplazamiento del vector Pyxz3 hasta su posicion final como vector Pyxz2 eje X eje Y eje Z rejillas
title(['ROTACION: title(['ROTACION: XYZ' ,' num2str(angulo3_grad)]); Longitud_u = norm(Puvw) Longitud1 = norm(Pxyz1) Longitud2 = norm(Pxyz2) Longitud3 = norm(Pxyz3)
','Angulo Theta1 = ' num2str(angulo1_grad), ' % % % %
','Angulo Theta2 = ' num2str(angulo2_grad), '
Hallamos Hallamos Hallamos Hallamos
la la la la
norma norma norma norma
del del del del
vector vector vector vector
','Angulo Theta3 = '
Puvw Pxyz1 Pyxz2 Pxyz3
axis([-Longitud3 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