You are on page 1of 52

MATLAB

Rotar y trasladar funciones 2D y 3D con vectores de traqueo


Versión Mejorada

Autor:

Ingeniero Electrónico: Monteza Zevallos Fidel Tomas

Junio de 2018 (Primera Edición)

V. J. M. J. / A. M. M. J.
Rotar y trasladar funciones 2D y 3D con vectores de traqueo
Versión Mejorada

Índice general

INTRODUCCIÓN

1.- DESARROLLO

2.- EXPLICACIÓN BREVE DEL FUNCIONAMIENTO

3.- GRAFICAR EN 2D

4.- ROTAR Y TRASLADAR FUNCIONES EN 2D

5.- GRAFICAR EN 3D

6.- ROTAR Y TRASLADAR UNA FUNCIÓN EN 3D

7. LÍNEAS DEL ALGORITMO DEL PROGRAMA GRAFICAR.m


Rotar y trasladar funciones 2D y 3D con vectores de traqueo
Versión Mejorada

INTRODUCCIÓN

La cinemática es la ciencia del movimiento que trata el tema sin considerar las fuerzas que lo ocasionan. Dentro de esa ciencia se estudian la
posición, la velocidad, la aceleración y todas las demás derivadas de alto orden de las variables de posición. En consecuencia, el estudio de la
cinemática de manipuladores se refiere a todas las propiedades geométricas y basadas en el tiempo del movimiento.
La manipulación de robots implica el movimiento de piezas y diferentes herramientas en el espacio. Para hacer la representación de estas piezas
es necesario definir sistemas de coordenadas.

Para que un robot pueda manipular ciertos objetos, es necesario saber la posición y orientación de la pieza respecto al robot. Para poder hacer
esto, existen métodos para la representación de posición y orientación espacial de un objeto.

Utilizar la matriz de transformación homogénea es uno de ellos. También se pueden desarrollar por cuaterniones, el cual es un método
computacional que se utiliza por algunos robots comerciales para la representación de la orientación.

Es necesario tener conocimientos sobre Ángulos de Euler igualmente. Los ángulos de Euler 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.
1.- DESARROLLO
Para este desarrollo es importante recordar las matrices de rotación, tanto aquellas que rotan en el mismo sentido al de las agujas del reloj
(Generadas por un ángulo trigonométrico negativo), como las que rotan en sentido inverso (Generadas por un ángulo trigonométrico positivo).

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

Y la matriz de transformación general para la rotación en el mismo sentido al de las agujas del reloj (Generadas por un ángulo trigonométrico
negativo):
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

2.- EXPLICACIÓN BREVE DEL FUNCIONAMIENTO


A continuación, se muestra la interfaz GUI creada con ayuda de GUIDE-MATLAB.

Interface del programa de una función que permite graficar el desplazamiento de funciones 2D o 3D en tiempo real
Sirve para rotar funciones con respecto a cualquiera de los ejes X, Y o Z, aplicando matrices de transformación básicas, y la matriz de transformación
general. Se puede seleccionar una cuarta opción referente a rotar la función, que es empleando la matriz de “Eje arbitrario” estudiada en cinemática
de robots manipuladores.

Interface del programa de una función f(x) = x^4 operando en tiempo real con un angulo positivo de 90 grados

La interfaz cuenta con una parte donde se grafica la función que el usuario ingrese, ya sea f(x) o en su defecto f(x,y), además de seis cajas de texto,
dos para ingresar las respectivas funciones, una tercera para el ángulo que se rotará, y las últimas tres son para ingresar cada uno de los tres
componentes del vector arbitrario con respecto al cual rotará (Si así se elige) la función, cuenta también con dos ‘popupmenu’ en los cuales se elige
una de las tres trayectorias, y en el otro uno de los cuatro diferentes ejes con respecto a los cuales rotar. Finalmente, la interfaz tiene un ‘slider’ que
sirve para aumentar la velocidad de la animación hasta veinte veces y un botón que sirve para iniciar la animación como se puede visualizar en la
siguiente figura:

Si desea ejecutar el programa con una función f(x). Deberá seguir en la zona del panel de mandos los siguientes pasos:
1.- Tipear una función en la celda denominada "f(x)=", por ejemplo: sin(x)
2.- En la celda denominada "Angulo de rotación" tipear el valor del ángulo que se desea rotar negativo o positivo (Puede ser de más de una vuelta)
3.- En el selector denominado "Rotar con respecto a" hacer clik para elegir un eje de giro determinado
4.- En el selector denominado "Elija una de tres trayectorias" hacer clik para elegir una determinada
5.- Si en el paso anterior selecciono Rotar con respecto a EJE ARBITRARIO debe ingresar un valor numérico en cada celda de "Componentes
del eje arbitrario". Por el contrario, si solo selecciono EJE X - EJE Y o EJE Z, entonces puede dejar en blanco estas celdas
6.- En el selector HScroll denominado "Velocidad (0 - 20)" debe deslizarlo para seleccionar el valor de la velocidad de rotación
7.- Listo ahora puede ejecutar la tecla denominada "INICIAR SIMULACION" y podrá apreciar como su función f(x) sigue una trayectoria
determinada, seguida por dos vectores de traqueo (Vector verde de traqueo horizontal y Vector rojo de traqueo vertical). Además de tener un vector
de referencia color azul, el que indicara la posición inicial de la trayectoria que se sigue.

Interface del programa de una función f(x) = sin(x) operando en tiempo real con un angulo positivo de 90 grados
Interface del programa de una función f(x,y) = x^3*y^3 operando en tiempo real con un angulo positivo de 360 grados

Si desea ejecutar el programa con una función f(x,y). Seguir los siguientes pasos:

1.- Tipear una función en la celda denominada "f(x,y)=", por ejemplo: sin(x)*cos(x)
2.- En la celda denominada "Angulo de rotación" tipear el valor del ángulo que se desea rotar negativo o positivo (Puede ser de más de una vuelta)
3.- En el selector denominado "Rotar con respecto a" hacer clik para elegir un eje de giro determinado
4.- En el selector denominado "Elija una de tres trayectorias" hacer clik para elegir una determinada
5.- Si en el paso anterior selecciono Rotar con respecto a EJE ARBITRARIO debe ingresar un valor numérico en cada celda de "Componentes
del eje arbitrario". Por el contrario, si solo selecciono EJE X - EJE Y o EJE Z, entonces puede dejar en blanco estas celdas
6.- En el selector HScroll denominado "Velocidad (0 - 20)" debe deslizarlo para seleccionar el valor de la velocidad de rotación
7.- Listo ahora puede ejecutar la tecla denominada "INICIAR SIMULACION" y podrá apreciar como su función f(x) sigue una trayectoria
determinada, seguida igualmente por dos vectores de traqueo. Además de tener un vector de referencia color azul que indicara la posición inicial
de la trayectoria que se sigue.

Interface del programa de una función f(x,y) = sin(x)*cos(y) operando en tiempo real con un angulo positivo de 360 grados

NOTA.- En este proyecto se deben considerar las matrices que generan una rotación en el mismo sentido al de las agujas del reloj tanto para
movimientos en el mismo sentido de las agujas como para movimientos en sentido opuesto. La explicación es la siguiente:
Al momento de ingresar el ángulo este debe ser ingresado con signo de forma tal que el programa automáticamente reemplaza este valor en el
ángulo de la matriz generando automáticamente el tipo de rotación señalada por el usuario.
Interface del programa de una función f(x) = x^2+2*x operando en tiempo real con un angulo negativo de 360 grados

3.- GRAFICAR EN 2D
Primero se obtiene la función en la variable ‘S’ pero en forma de cadena de carácter, utiliza la función ‘vectorize(inline(s))’ para evaluar dichos
caracteres y si el programa lo reconoce, lo convierte a una función. Los arreglos ‘salidaxx’, ‘salidayy’, y ‘salidazz’, son los vectores que se utilizarán
para guardar todo el conjunto de datos de la función, que después se multiplicarán por la matriz de rotación.
Parte de las líneas del programa de la interface

En el ciclo se observa cómo se crea un vector ‘b’ que contiene todos los datos de pares ordenados de la función.

Y también se observa cómo se rellena ‘salidaxx’ y ‘salidayy’ con los datos de la función, nótese que dichos vectores primero se declaran con un
tamaño necesario, pero rellenos de ceros.

4.- ROTAR Y TRASLADAR FUNCIONES EN 2D


En cuanto se presiona el botón "INICIAR SIMULACION" se entra a una serie de condiciones que están delimitadas principalmente por la variable
‘rotar’, la cual se utiliza como un ‘switch’ que puede contener hasta cuatro casos diferentes, uno para si el usuario elige rotar con respecto a ‘X’, ‘Y’
o ‘Z’, o en su defecto si se elige rotar con respecto a un eje arbitrario.
Parte de las líneas del programa de la interface

Como se puede observar en la figura anterior, el caso mostrado es para cuando se requiera girar con respecto a X. ‘co’ es un vector de 3x1 que
tiene los valores de la función f(x) en las tres coordenadas.

Nótese que la trayectoria uno que es la que se muestra es una circunferencia parametrizada. ‘Rx’ es la matriz de rotación básica con respecto al
eje ‘X’. Se aprecia que ‘co_R’ es el resultado de multiplicar la matriz de rotación con respecto a ‘X’ de 3x3, por el vector de 3x1 que contiene todos
los elementos de la función a rotar, por ello ‘co_R’ es de dimensiones de 3x1. Y dicho vector contiene todas las coordenadas de la función ya rotada.
Por ello se nota un efecto de rotación. Para trasladar dicha función por la circunferencia parametrizada (que representa la trayectoria número 1),
simplemente se le suman a cada uno de los elementos del vector que contiene los elementos de la función ya rotada, los elementos en ‘X’, ‘Y’ y ‘Z’
de la circunferencia para que se vea el efecto de que no sólo está rotando la función, sino que también se mueve a lo largo de dicha circunferencia.

5.- GRAFICAR EN 3D
Cuando se teclea en el cuadro de texto correspondiente a la función f(x,y), automáticamente el valor de la variable llamada ‘variables’ cambia a 2.
Pero para poder graficar en 3 dimensiones es necesario crear un mallado en MATLAB con la función ‘meshgrid’, pero antes de ello es imperativo
declarar los valores del dominio, tanto de la variable independiente ‘x’ como los de la variable ‘y’, por ello se declara con la función ‘linspace’ un
vector de veinticinco valores que irán de ‘-2*pi’ hasta ‘2*pi’.
Parte de las líneas del programa de la interface

Después se utiliza la función ‘vectorize’ de la misma forma que ya se había comentado anteriormente, pero ahora, con el fin de reconocer una
función de dos variables independientes f(x,y) con el fin de graficar en tres dimensiones. Como se puede observar en la línea 100, directamente
después de teclear la función, la misma se gráfica. esto con la ayuda de la función ‘surfc’.

6.- ROTAR Y TRASLADAR UNA FUNCIÓN EN 3D


En esta parte del código se observa que si la función ‘variables’ toma el valor de dos, entonces entra a dichas líneas de código. La variable ‘th2’ es
la variable del ángulo, aquí es donde también se toma en cuenta la condición de que si el ángulo es positivo o negativo, esto para controlar el
movimiento de la animación, tanto de rotación como de traslación.

Asimismo, si la trayectoria es la numero uno, entonces se utiliza la misma circunferencia parametrizada como trayectoria uno. Es necesario tener
en un vector los elementos de ‘X’, ‘Y’ y ‘Z’ de la función de tres dimensiones, para eso, se utilizan dos iteraciones, que estarán llenando el número
de filas y columnas de cada uno de los elementos de la función, y a la vez, guardando dichos elementos como partes de un vector de 3x1, el cual
es el ‘vector_z’, dicho vector se multiplicará por la matriz de rotación de ‘X’ y así se obtendrán en el vector ‘Rot_x’ los valores de los componentes
de ‘X’, ‘Y’ y ‘Z’ de la función pero ya rotada con respecto a ‘X’.
Pero para trasladar la función a lo largo de la circunferencia que representa la trayectoria uno, se empleó la misma técnica que se utilizó en dos
dimensiones, simplemente se le suman a cada uno de los elementos del vector que contiene los elementos de la función ya rotada, los elementos
en ‘X’, ‘Y’ y ‘Z’ de la circunferencia para que se vea el efecto de que no sólo está rotando la función, sino que también se mueve a lo largo de dicha
trayectoria, esto se ve en la línea de código donde aparece la función surf(X+x1,Y+y1,Z+z1).

Y de esa forma, básicamente es como se realizó esta interfaz. Lo demás son una serie de sentencias y condiciones necesarias para que se pudiera
realizar como se esperaba.
7. LÍNEAS DEL ALGORITMO DEL PROGRAMA GRAFICAR.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Programa de una funcion que permite graficar el desplazamiento de funciones 2D o 3D en tiempo real
%
% Si desea ejecutar el programa con una funcion f(x). Seguir los siguientes pasos:
% 1.- Tipear una funcion en la celda denominada "f(x)=", por ejemplo: sin(x)
% 2.- En la celda denominada "Angulo de rotacion" tipear el valor del angulo que se desea rotar (Puede ser de mas de una vuelta) negativo o positivo
% 3.- En el selector denominado "Elija una de tres trayectorias" hacer clik para elegir una determinada
% 4.- En el selector denominado "Rotar con respecto a" hacer clik para elegir un eje de giro determinado
% 5.- Si en el paso anterior selecciono Rotar con respecto a EJE ARBITRARIO debe ingresar un valor numerico en cada celda de "Componentes del eje arbitrario"
% Por el contrario si solo selecciono EJE X - EJE Y o EJE Z. Entonces puede dejar en blanco estas celdas
% 6.- En el selector HScroll denominado "VELOCIDAD (0-20)" debe deslizarlo para seleccionar el valor de la velocidad de rotacion
% 7.- Listo ahora puede ejecutar la tecla denomida "INICIAR SIMULACION" y podra apreciar como su funcion f(x) sigue una trayectoria determinada
%
% Si desea ejecutar el programa con una funcion f(x,y). Seguir los siguientes pasos:
% 1.- Tipear una funcion en la celda denominada "f(x,y)=", por ejemplo: sin(x)*cos(x)
% 2.- En la celda denominada "Angulo de rotacion" tipear el valor del angulo que se desea rotar (Puede ser de mas de una vuelta) negativo o positivo
% 3.- En el selector denominado "Elija una de tres trayectorias" hacer clik para elegir una determinada
% 4.- En el selector denominado "Rotar con respecto a" hacer clik para elegir un eje de giro determinado
% 5.- Si en el paso anterior selecciono Rotar con respecto a EJE ARBITRARIO debe ingresar un valor numerico en cada celda de "Componentes del eje arbitrario"
% Por el contrario si solo selecciono EJE X - EJE Y o EJE Z. Entonces puede dejar en blanco estas celdas
% 6.- En el selector HScroll denominado "VELOCIDAD (0-20)" debe deslizarlo para seleccionar el valor de la velocidad de rotacion
% 7.- Listo ahora puede ejecutar la tecla denomida "INICIAR SIMULACION" y podra apreciar como su funcion f(x,y) sigue una trayectoria determinada
%
%
% Tambien se debe recordar las siguientes matrices de rotacion 3D para cada Eje y para cada tipo de angulo (Positivo o Negativo). Para estas matrices el angulo debe ser considerado en
radianes
%
% Matrices que generan una rotacion en el sentido opuesto a las agujas del reloj. Por tanto generan un angulo trigonometrico positivo
% Rx = [1 0 0;0 cos(th) sin(th);0 -sin(th) cos(th)] Es la matriz de rotacion en el eje X en el sentido opuesto a las agujas del reloj del espacio 3D
% Ry = [cos(th) 0 -sin(th);0 1 0;sin(th) 0 cos(th)] Es la matriz de rotacion en el eje Y en el sentido opuesto a las agujas del reloj del espacio 3D
% Rz = [cos(th) sin(th) 0;-sin(th) cos(th) 0;0 0 1] Es la matriz de rotacion en el eje Z en el sentido opuesto a las agujas del reloj del espacio 3D
%
%
% Matrices que generan una rotacion en el mismo sentido a las agujas del reloj. Por tanto generan un angulo trigonometrico negativo
% Rx = [1 0 0;0 cos(th) -sin(th);0 sin(th) cos(th)] Es la matriz de rotacion en el eje X en el mismo sentido a las agujas del reloj del espacio 3D
% Ry = [cos(th) 0 sin(th);0 1 0;-sin(th) 0 cos(th)] Es la matriz de rotacion en el eje Y en el mismo sentido a las agujas del reloj del espacio 3D
% Rz = [cos(th) -sin(th) 0;sin(th) cos(th) 0;0 0 1] Es la matriz de rotacion en el eje Z en el mismo sentido a las agujas del reloj del espacio 3D
%
%
% NOTA.- En este proyecto se deben considerar las matrices que generan una rotacion en el mismo sentido al de las agujas del reloj tanto para
% movimientos en el mismo sentido de las agujas como para movientos en sentido opuesto. La explicacion es la siguiente:
% Al momento de ingresar el angulo este debe ser ingresado con signo de forma tal que el programa automaticamente reemplaza este valor en el
% angulo de la matriz generando automaticamente el tipo de rotacion señalada por el usuario.
%
% Para un mejor entendimiento, las lineas se encuentran comentadas
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Estas lineas de programacion se encargan de ejecutar la funcion directamente desde la ventana Editor (Diferente a cuando una funcion debe
% ejecutarse desde la ventana del Command Window). Confirmar que al momento de iniciar la simulacion el nombre del archivo aparece como una funcion
% ejecutada en la ventana del Command Window tambien. Y llama al mismo tiempo al archivo graficar.fig
function varargout = graficar(varargin)
% GRAFICAR MATLAB lineas de codigo para el archivo graficar.fig
% GRAFICAR, by itself, creates a new GRAFICAR or raises the existing singleton*.
%
% H = GRAFICAR returns the handle to a new GRAFICAR or the handle to the existing singleton*.
%
% GRAFICAR('CALLBACK',hObject,eventData,handles,...) calls the local function named CALLBACK in graficar.m with the given input arguments.
%
% GRAFICAR('Property','Value',...) creates a new GRAFICAR or raises the existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before graficar_OpeningFcn gets called. An unrecognized property name or invalid value makes property application stop.
% All inputs are passed to graficar_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

gui_Singleton = 1;
gui_State = struct('gui_Name',mfilename,'gui_Singleton',gui_Singleton,'gui_OpeningFcn',@graficar_OpeningFcn,'gui_OutputFcn',@graficar_OutputFcn,'gui_LayoutFcn',[],'gui_Callback',[]);

if nargin && ischar(varargin{1}) % A && B (B es unicamente evaluado si A es verdadero)


gui_State.gui_Callback = str2func(varargin{1}); % El comando str2func(S) convierte a una funcion la variable tipo cadena S
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

% Executes just before graficar is made visible. hObject, eventdata, handles, varargin son parametros de entrada.
function graficar_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to graficar (see VARARGIN)

% Choose default command line output for graficar


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes graficar wait for user response (see UIRESUME)


% uiwait(handles.figure1);

% Outputs from this function are returned to the command line.


function varargout = graficar_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

% edit1 es la ventana en la interface de GUI donde se ingresa la funcion del tipo f(x,y) para graficos 3D
function edit1_Callback(hObject, eventdata, handles) % Funcion en 3D
global variables; % Esta variable se utiliza para determinar el tipo de grafico. Si es Uno 2D y si es Dos 3D
global x;
global y;
global z;

variables = 2; % Vale '2' si es una funcion del tipo f(x,y)

x = linspace(-2*pi,2*pi,25); % Arreglo para x de 25 valores desde -2pi a 2pi


y = linspace(-2*pi,2*pi,25); % Arreglo para y de 25 valores desde -2pi a 2pi

s = get(handles.edit1,'string');
f = vectorize(inline(s));
[x,y] = meshgrid(x,y);
z = f(x,y);

% Graficar directamente despues de teclear la funcion f(x,y)


handles.axes1;
surfc(x,y,z)
axis([-20 20 -20 20 -20 20]);

% edit1 es la ventana en la interface de GUI donde se ingresa la funcion del tipo f(x,y) para graficos 3D
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% edit2 es la ventana en la interface de GUI donde se ingresa el valor del angulo por el cual se rotara la funcion para graficos 2D y 3D
function edit2_Callback(hObject, eventdata, handles)
global angulo1; % Declaramos la variable angulo1 del tipo global
angulo = get(handles.edit2,'string'); % La variable angulo captura el valor ingresado en la Caja edit2 en tipo cadena
angulo1 = str2num(angulo); % Se realiza la conversion del valor tipo cadena de la variable angulo al tipo numerico

% edit2 es la ventana en la interface de GUI donde se ingresa el valor del angulo por el cual se rotara la funcion para graficos 2D y 3D
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% edit3 es la ventana en la interface de GUI donde se ingresa la funcion del tipo f(x) para graficos 2D
function edit3_Callback(hObject, eventdata, handles) % Funcion en 2D
global variables; % Esta variable se utiliza para determinar el tipo de grafico. Si es Uno 2D y si es Dos 3D
global x;
global y; % Esta variable y no tiene uso en esta parte del programa. Se reserva para posterior uso
global z; % Esta variable z no tiene uso en esta parte del programa. Se reserva para posterior uso
global rotar; % Esta variable rotar no tiene uso en esta parte del programa. Se reserva para posterior uso
global salidaxx; % Esta variable se utilizara para guardar los conjuntos de datos de la función y después se multiplicara por la matriz
de rotación
global salidayy; % Esta variable se utilizara para guardar los conjuntos de datos de la función y después se multiplicara por la matriz
de rotación
global salidazz; % Esta variable se utilizara para guardar los conjuntos de datos de la función y después se multiplicara por la matriz
de rotación

variables = 1; % Vale '1' si es una funcion del tipo f(x)

s = get(handles.edit3,'string');
f = vectorize(inline(s));

x = -10:0.5:10; % La variable x va desde -10 hasta 10 en particiones de 0.5 (Se originan 41 valores)
u = f(x);
t = 90;
% Vectores del tamaño de la variable x que se rellenan con CEROS para inicializarlos y despues utilizarlos.
salidaxx = zeros(size(x));
salidayy = zeros(size(x));
salidazz = zeros(size(x));

plot(x,u)

% Vectorizar valores de la funcion f(x)


for ii = 1:size(x,2)
b = [x(ii) u(1,ii)] ;
vr = b;
salidaxx(1,ii) = vr(1);
salidayy(1,ii) = vr(2);
end

% edit3 es la ventana en la interface de GUI donde se ingresa la funcion del tipo f(x) para graficos 2D
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% pushbutton4 es la tecla de Ejecucion en la interface de GUI donde se inicia la simulacion de las funciones del tipo f(x) para graficos 2D o o f(x,y)para graficos 3D
function pushbutton4_Callback(hObject, eventdata, handles) % Boton de ejecucion denominado pushbutton4 con la etiqueta INICIAR
global angulo1; % Variable angulo1 para representar el Angulo de rotacion
global variables; % Esta variable se utiliza para determinar el tipo de grafico. Si es Uno 2D y si es Dos 3D
global rotar; % Variable principal que dara inicio a cada Case (Son cuatro Case)
global x;
global y;
global z;
global salidaxx; % Esta variable se utilizara para guardar los conjuntos de datos de la función y después se multiplicara por la matriz
de rotación
global salidayy; % Esta variable se utilizara para guardar los conjuntos de datos de la función y después se multiplicara por la matriz
de rotación
global salidazz; % Esta variable se utilizara para guardar los conjuntos de datos de la función y después se multiplicara por la matriz
de rotación
global tray1; % Variable tray1 para representar el tipo de la Trayectoria (Uno, Dos o Tres)
global res1; % Variable res1 es la velocidad de animacion. Positivo se rota en sentido a las agujas del reloj. Negativo en sentido
contrario
global eje_a; % Variable eje_a para representar el vector unitario con dirección del vector arbitrario
global xk1; % Variable xk1 es la componente X del vector arbitrario
global yk1; % Variable yk1 es la componente Y del vector arbitrario
global zk1; % Variable zk1 es la componente Z del vector arbitrario
global m; % Variable m para obtener de la magnitud del vector arbitrario

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Se presenta la estructura basica de programacion:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% switch rotar Rotar con respecto a X, Y o Z
%
% Case1 Todo el case 1 es rotar con respecto a X (2D o 3D)
% variables = 1 2D respecto a X
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
% variables = 2 3D respecto a X
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
%
% Case2 Todo el case 2 es rotar con respecto a Y (2D o 3D)
% variables = 1 2D respecto a Y
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
% variables = 2 3D respecto a Y
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
%
% Case3 Todo el case 3 es rotar con respecto a Z (2D o 3D)
% variables = 1 2D respecto a Z
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
% variables = 2 3D respecto a Z
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
%
% Case4 Todo el case 4 es rotar con respecto un Eje arbitrario (2D 0 3D)
% variables = 1 2D respecto a un Eje arbitrario
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
% variables = 2 3D respecto a un Eje arbitrario
% angulo1 > 0 Angulo de rotacion positivo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo positivo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo positivo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo positivo
% angulo1 < 0 Angulo de rotacion negativo
% tray1 = 1 Se elige trayectoria 1 considerando el angulo negativo
% tray1 = 2 Se elige trayectoria 2 considerando el angulo negativo
% tray1 = 3 Se elige trayectoria 3 considerando el angulo negativo
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

switch rotar % Rotar con respecto a X, Y o Z


case 1 % Todo el case 1 es rotar con respecto a X (2D o 3D)
if variables == 1 % Si es igual a 1 es en 2D (Rotar en 2D con respecto a X)
co = [salidaxx; salidayy; salidazz]; % Esta variable co es una matriz que se utilizara para guardar los conjuntos de datos de la función
if angulo1 >= 0 % Se elige angulo de rotacion positivo en 2D
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
x1 = r*cosd(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria de la circunferencia

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

%co_R = (rotx(th_rad))*co; % Ecuacion con la funcion rotx considerando valores de su angulo en radianes semejante a la matriz Rx
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz rotacion eje X en mismo sentido agujas del reloj y medida del angulo en sexagesimales
co_R = Rx*co; % Rotacion del vector co en el eje X originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje X en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotx(th_rad))*co; % Ecuacion con la funcion rotx semejante a la matriz Rx


%Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
%co_R = Rx*co; % Rotacion del vector co en el eje X originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje X en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotx(th_rad))*co; % Ecuacion con la funcion rotx semejante a la matriz Rx


%Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
%co_R = Rx*co; % Rotacion del vector co en el eje X originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje X en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

if angulo1 < 0 % Se elige angulo negativo 2D


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
x1 = r*cosd(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria de la circunferencia

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

%co_R = (rotx(th_rad))*co; % Ecuacion con la funcion rotx considerando valores de su angulo en radianes semejante a la matriz Rx
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
co_R = Rx*co; % Rotacion del vector co en el eje X originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje X en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotx(th_rad))*co; % Ecuacion con la funcion rotx semejante a la matriz Rx


%Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
%co_R = Rx*co; % Rotacion del vector co en el eje X originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje X en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotx(th_rad))*co; % Ecuacion con la funcion rotx semejante a la matriz Rx


%Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
%co_R = Rx*co; % Rotacion del vector co en el eje X originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje X en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

salidaxx = co_R(1,:);
salidayy = co_R(2,:);
salidazz = co_R(3,:);
end

if variables == 2 % Si es igual a 2 es en 3D (Rotar en 3D con respecto a X)


if angulo1 >= 0 % Se elige angulo positivo 2D
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion que describe la Trayectoria
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_x = Rx*vector_z;
X(f,c) = Rot_x(1);
Y(f,c) = Rot_x(2);
Z(f,c) = Rot_x(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje X en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_x = Rx*vector_z;
X(f,c) = Rot_x(1);
Y(f,c) = Rot_x(2);
Z(f,c) = Rot_x(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje X en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_x = Rx*vector_z;
X(f,c) = Rot_x(1);
Y(f,c) = Rot_x(2);
Z(f,c) = Rot_x(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje X en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end

if angulo1 < 0 % Se elige angulo negativo 2D


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_x = Rx*vector_z;
X(f,c) = Rot_x(1);
Y(f,c) = Rot_x(2);
Z(f,c) = Rot_x(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje X en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_x = Rx*vector_z;
X(f,c) = Rot_x(1);
Y(f,c) = Rot_x(2);
Z(f,c) = Rot_x(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje X en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rx = [1 0 0;0 cosd(th) -sind(th);0 sind(th) cosd(th)]; % Matriz de rotacion en el eje 'X' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_x = Rx*vector_z;
X(f,c) = Rot_x(1);
Y(f,c) = Rot_x(2);
Z(f,c) = Rot_x(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje X en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end
end

case 2 % Todo el case 2 es rotar con respecto a Y (2D o 3D)


if variables == 1 % Si es igual a 1 es en 2D (Rotar en 2D con respecto a Y)
co = [salidaxx; salidayy; salidazz]; % Esta variable co es una matriz que se utilizara para guardar los conjuntos de datos de la función
if angulo1 >= 0 % Se elige angulo positivo 2D
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
x1 = r*cosd(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria de la circunferencia

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

%co_R = (roty(th_rad))*co; % Ecuacion con la funcion rotx considerando valores de su angulo en radianes semejante a la matriz Rx
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
co_R = Ry*co; % Rotacion del vector co en el eje Y originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Y en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (roty(th_rad))*co; % Ecuacion con la funcion roty semejante a la matriz Ry


%Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
%co_R = Ry*co; % Rotacion del vector co en el eje Y originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Y en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (roty(th_rad))*co; % Ecuacion con la funcion roty semejante a la matriz Ry


%Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
%co_R = Ry*co; % Rotacion del vector co en el eje Y originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Y en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

if angulo1 < 0 % Se elige angulo negativo 2D


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
x1 = r*cosd(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria de la circunferencia

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

%co_R = (roty(th_rad))*co; % Ecuacion con la funcion rotx considerando valores de su angulo en radianes semejante a la matriz Rx
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
co_R = Ry*co; % Rotacion del vector co en el eje Y originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Y en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (roty(th_rad))*co; % Ecuacion con la funcion roty semejante a la matriz Ry


%Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
%co_R = Ry*co; % Rotacion del vector co en el eje Y originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Y en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx
co_R = (roty(th_rad))*co; % Ecuacion con la funcion roty semejante a la matriz Ry
%Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
%co_R = Ry*co; % Rotacion del vector co en el eje Y originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Y en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

salidaxx = co_R(1,:);
salidayy = co_R(2,:);
salidazz = co_R(3,:);
end

if variables == 2 % Rotar con respecto a Y, en 3D


if angulo1 >= 0 % Se elige angulo positivo
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_y = Ry*vector_z;
X(f,c) = Rot_y(1);
Y(f,c) = Rot_y(2);
Z(f,c) = Rot_y(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Y en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_y = Ry*vector_z;
X(f,c) = Rot_y(1);
Y(f,c) = Rot_y(2);
Z(f,c) = Rot_y(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Y en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_y = Ry*vector_z;
X(f,c) = Rot_y(1);
Y(f,c) = Rot_y(2);
Z(f,c) = Rot_y(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Y en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end

if angulo1 < 0 % Se elige angulo negativo


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_y = Ry*vector_z;
X(f,c) = Rot_y(1);
Y(f,c) = Rot_y(2);
Z(f,c) = Rot_y(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Y en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_y = Ry*vector_z;
X(f,c) = Rot_y(1);
Y(f,c) = Rot_y(2);
Z(f,c) = Rot_y(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Y en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Ry = [cosd(th) 0 sind(th);0 1 0;-sind(th) 0 cosd(th)]; % Matriz de rotacion en el eje 'Y' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_y = Ry*vector_z;
X(f,c) = Rot_y(1);
Y(f,c) = Rot_y(2);
Z(f,c) = Rot_y(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Y en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end
end

case 3 % Todo el case 3 es rotar con respecto a Z (2D o 3D)


if variables == 1 % Rotar con respecto a Z, en 2D
co = [salidaxx; salidayy; salidazz]; % Esta variable co es una matriz que se utilizara para guardar los conjuntos de datos de la función
if angulo1 >= 0 % Se elige angulo positivo
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
x1 = r*cosd(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria de la circunferencia

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

%co_R = (rotz(th_rad))*co; % Ecuacion con la funcion rotx considerando valores de su angulo en radianes semejante a la matriz Rx
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
co_R = Rz*co; % Rotacion del vector co en el eje Z originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Z en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotz(th_rad))*co; % Ecuacion con la funcion rotz semejante a la matriz Rz


%Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
%co_R = Rz*co; % Rotacion del vector co en el eje Z originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Z en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria
Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotz(th_rad))*co; % Ecuacion con la funcion rotz semejante a la matriz Rz


%Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
%co_R = Rz*co; % Rotacion del vector co en el eje Z originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Z en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

if angulo1 < 0 % Se elige angulo negativo


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
x1 = r*cosd(th); % La trayectoria que se seguira sera de una circunferencia hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria de la circunferencia

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

%co_R = (rotz(th_rad))*co; % Ecuacion con la funcion rotx considerando valores de su angulo en radianes semejante a la matriz Rx
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
co_R = Rz*co; % Rotacion del vector co en el eje Z originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Z en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotz(th_rad))*co; % Ecuacion con la funcion rotz semejante a la matriz Rz


%Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
%co_R = Rz*co; % Rotacion del vector co en el eje Z originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Z en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

co_R = (rotz(th_rad))*co; % Ecuacion con la funcion rotz semejante a la matriz Rz


%Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
%co_R = Rz*co; % Rotacion del vector co en el eje Z originando el vector co_R

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en el Eje Z en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

salidaxx = co_R(1,:);
salidayy = co_R(2,:);
salidazz = co_R(3,:);
end

if variables == 2 % Rotar con respecto a Z, en 3D


if angulo1 >= 0 % Se elige angulo positivo
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th);
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_z = Rz*vector_z;
X(f,c) = Rot_z(1);
Y(f,c) = Rot_z(2);
Z(f,c) = Rot_z(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Z en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_z = Rz*vector_z;
X(f,c) = Rot_z(1);
Y(f,c) = Rot_z(2);
Z(f,c) = Rot_z(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Z en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th);
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_z = Rz*vector_z;
X(f,c) = Rot_z(1);
Y(f,c) = Rot_z(2);
Z(f,c) = Rot_z(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Z en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end

if angulo1 < 0 % Se elige angulo negativo


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_z = Rz*vector_z;
X(f,c) = Rot_z(1);
Y(f,c) = Rot_z(2);
Z(f,c) = Rot_z(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Z en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_z = Rz*vector_z;
X(f,c) = Rot_z(1);
Y(f,c) = Rot_z(2);
Z(f,c) = Rot_z(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Z en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
Rz = [cosd(th) -sind(th) 0; sind(th) cosd(th) 0; 0 0 1]; % Matriz de rotacion en el eje 'Z' en el mismo sentido a las agujas del reloj
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_z = Rz*vector_z;
X(f,c) = Rot_z(1);
Y(f,c) = Rot_z(2);
Z(f,c) = Rot_z(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en el Eje Z en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con los resultados de los angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end
end

case 4 % Todo el case 4 es rotar con respecto a un eje arbitrario


xk = get(handles.edit6,'String');
xk1 = str2num(xk); % Componente 'X' del vector arbitrario
yk = get(handles.edit7,'String');
yk1 = str2num(yk); % Componente 'Y' del vector arbitrario
zk = get(handles.edit8,'String');
zk1 = str2num(zk); % Componente 'Z' del vector arbitrario
m = sqrt((xk1^2)+(yk1^2)+(zk1^2)); % Obtención de la magnitud del vector arbitrario
eje_a = [xk1/m; yk1/m; zk1/m]; % Vector unitario con dirección del vector arbitrario

if variables == 1 % Rotar con respecto al Eje arbitrario, en 2D


co = [salidaxx; salidayy; salidazz];
if angulo1 >= 0 % Se elige angulo positivo
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th); eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th),
(eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th), (eje_a(3)^2)*vo+cosd(th)];
co_R = R_eje_a*co;

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en un Eje Arbitrario en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th); eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th),
(eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th), (eje_a(3)^2)*vo+cosd(th)];
co_R = R_eje_a*co;

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en un Eje Arbitrario en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th); eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th),
(eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th), (eje_a(3)^2)*vo+cosd(th)];
co_R = R_eje_a*co;

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en un Eje Arbitrario en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8])
pause(0.01)
end
end
end

if angulo1 < 0 % Se elige angulo negativo


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotz y rotx
Pz = (rotz(th_rad))*Pu; % Ecuacion con la funcion rotz considerando valores de su angulo en radianes semejante a la matriz Rz

vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th); eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th),
(eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th), (eje_a(3)^2)*vo+cosd(th)];
co_R = R_eje_a*co;

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Pz,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en un Eje Arbitrario en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th); eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th),
(eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th), (eje_a(3)^2)*vo+cosd(th)];
co_R = R_eje_a*co;

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en un Eje Arbitrario en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria

Pc = [0;0;z1]; % Punto inicial Pc del radio de la circunferencia de la Trayectoria


Po = [0;0;0]; % Punto inicial Po del vector de posicion (Centro de coordenadas)
Pu = [2*r;0;z1]; % Punto final Pu del vector posicion fijo de referencia
Ps = [x1;y1;z1]; % Punto final Ps del vector posicion que esta siguiendo la Trayectoria
th_rad = (th*pi)/180; % Conversion del angulo th en sexagesimal a th_rad en radianes para la funcion rotx

vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th); eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th),
(eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th), (eje_a(3)^2)*vo+cosd(th)];
co_R = R_eje_a*co;

plot3(co_R(1,:)+x1,co_R(2,:)+y1,co_R(3,:)+z1,'r',xc,yc,zc) % Se suma a cada coordenada de la funcion, las coordenadas de la trayectoria.


% De esta forma parecera como si la funcion estuviera siguiendo a la trayectoria
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Ps,'r',1) % Graficamos el vector posicion que esta siguiendo la Trayectoria (Color Rojo)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Po,Pu,'b',1) % Graficamos el vector posicion fijo de referencia (Color Azul)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,0,'mo') % Graficamos el centro de coordenadas del Punto Po (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
plot3(0,0,z1,'mo') % Graficamos el centro de la Trayectoria del Punto Pc de la circunferencia (Color Magenta)
hold on % Activamos que el grafico anterior se mantenga
vector3d(Pc,Ps,'g',1) % Graficamos el desplazamiento del vector del radio de la circunferencia (Color Verde)
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
title(['Rotacion 2D en un Eje Arbitrario en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-8 8 -8 8 -8 8]) % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.01)
end
end
end

salidaxx = co_R(1,:);
salidayy = co_R(2,:);
salidazz = co_R(3,:);
end
if variables == 2 % Rotar con respecto al Eje arbitrario, en 3D
if angulo1 >= 0 % Se elige angulo positivo
if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo positivo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th);
eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th), (eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th),
(eje_a(3)^2)*vo+cosd(th)];
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_eje_a1 = R_eje_a*vector_z;
X(f,c) = Rot_eje_a1(1);
Y(f,c) = Rot_eje_a1(2);
Z(f,c) = Rot_eje_a1(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en un Eje Arbitrario en la Trayectoria 1',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th);
eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th), (eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th),
(eje_a(3)^2)*vo+cosd(th)];
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_eje_a1 = R_eje_a*vector_z;
X(f,c) = Rot_eje_a1(1);
Y(f,c) = Rot_eje_a1(2);
Z(f,c) = Rot_eje_a1(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en un Eje Arbitrario en la Trayectoria 2',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo positivo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:res1:angulo1 % La variable res1 es la velocidad de animacion y para rotar en el mismo sentido agujas del reloj debe ser positivo
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th);
eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th), (eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th),
(eje_a(3)^2)*vo+cosd(th)];
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_eje_a1 = R_eje_a*vector_z;
X(f,c) = Rot_eje_a1(1);
Y(f,c) = Rot_eje_a1(2);
Z(f,c) = Rot_eje_a1(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en un Eje Arbitrario en la Trayectoria 3',' ','Angulo giro positivo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end

if angulo1 < 0 % Se elige angulo negativo


if tray1 == 1 % Se elige trayectoria 1 (Teniendo en cuenta el angulo negativo)
t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Este sera el radio de la Trayectoria de la circunferencia
xc = r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th);
eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th), (eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th),
(eje_a(3)^2)*vo+cosd(th)];
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_eje_a1 = R_eje_a*vector_z;
X(f,c) = Rot_eje_a1(1);
Y(f,c) = Rot_eje_a1(2);
Z(f,c) = Rot_eje_a1(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en un Eje Arbitrario en la Trayectoria 1',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 2 % Se elige trayectoria 2 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = r*cosd(5*t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = r*cosd(5*th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th);
eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th), (eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th),
(eje_a(3)^2)*vo+cosd(th)];
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_eje_a1 = R_eje_a*vector_z;
X(f,c) = Rot_eje_a1(1);
Y(f,c) = Rot_eje_a1(2);
Z(f,c) = Rot_eje_a1(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en un Eje Arbitrario en la Trayectoria 2',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end

if tray1 == 3 % Se elige trayectoria 3 (Teniendo en cuenta el angulo negativo)


t = 0:360; % Se dibuja primero la trayectoria que seguira la funcion
r = 3; % Aqui la variable r sera parte de la ecuacion de la trayectoria a seguir
xc = 2*r*cosd(t); % Primera parte ecuacion de trayectoria que se grafica. El comando cosd (angulo en sexagesimales)
yc = r*sind(5*t); % Segunda parte ecuacion de trayectoria que se grafica. El comando sind (angulo en sexagesimales)
zc = ones(1, length(xc))*5; % Tercera parte ecuacion de trayectoria que se grafica
for th = 0:-res1:angulo1 % La variable res1 es velocidad animacion y para rotar en el sentido opuesto agujas del reloj se multiplica por '-1'
y1 = r*sind(5*th); % Primera parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
x1 = 2*r*cosd(th); % Segunda parte de la ecuacion de la trayectoria que se seguira hasta donde llegue th
z1 = 5; % Esta es la altura en donde se dibujara la trayectoria
for c = 1:25
for f = 1:25
vo = 1-cosd(th);
R_eje_a = [(eje_a(1)^2)*vo+cosd(th), eje_a(1)*eje_a(2)*vo-eje_a(3)*sind(th), eje_a(1)*eje_a(3)*vo+eje_a(2)*sind(th);
eje_a(1)*eje_a(2)*vo+eje_a(3)*sind(th), (eje_a(2)^2)*vo+cosd(th), eje_a(2)*eje_a(3)*vo-eje_a(1)*sind(th); eje_a(1)*eje_a(3)*vo-eje_a(2)*sind(th), eje_a(2)*eje_a(3)*vo+eje_a(1)*sind(th),
(eje_a(3)^2)*vo+cosd(th)];
vector_z = [x(f,c);y(f,c);z(f,c)];
Rot_eje_a1 = R_eje_a*vector_z;
X(f,c) = Rot_eje_a1(1);
Y(f,c) = Rot_eje_a1(2);
Z(f,c) = Rot_eje_a1(3);
end
end
surf(X+x1,Y+y1,Z+z1) % Se grafica la superficie 3D con el comando surf
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
title(['Rotacion 3D en un Eje Arbitrario en la Trayectoria 3',' ','Angulo giro negativo = ' num2str(th)]); % Declaramos un titulo con resultados de angulos
grid on % Activamos las rejillas
axis([-20 20 -20 20 -20 20]); % Establecemos un sistema de ejes fijo X, Y y Z como minimos y maximos
pause(0.1);
end
end
end
end
end

function edit4_CreateFcn(hObject, eventdata, handles) % NOTA.- Buscar la aplicacion de edit4 (No aparece en el GUIDE)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit5_Callback(hObject, eventdata, handles) % NOTA.- Buscar la aplicacion de edit5 (No aparece en el GUIDE)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit6 as text


% str2double(get(hObject,'String')) returns contents of edit6 as a double

function edit5_CreateFcn(hObject, eventdata, handles) % NOTA.- Buscar la aplicacion de edit5 (No aparece en el GUIDE)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% slider1 es la ventana en la interface de GUI donde se ingresa el valor de la velocidad de rotacion de la funcion para graficos 2D y 3D
function slider1_Callback(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider


% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
global res1; % Variable res1 es la velocidad de animacion. Positivo se rota en sentido a las agujas del reloj. Negativo en sentido
contrario
v_vel = get(handles.slider1,'Value'); % La variable v_vel captura el valor del slider1
res1 = v_vel/10; % La variable res1 es la velocidad de la animacion captura el valor de v_vel
set(handles.text11,'String',fix(v_vel)) % La variable v_vel es enviada a la Caja de Texto text11
% slider1 es la ventana en la interface de GUI donde se ingresa el valor de la velocidad de rotacion de la funcion para graficos 2D y 3D
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.


if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% text11 es la ventana en la interface de GUI donde se visualiza el valor de la velocidad de rotacion de la funcion para graficos 2D y 3D
function text11_CreateFcn(hObject, eventdata, handles)
% hObject handle to text11 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% popupmenu1 es la ventana en la interface de GUI de donde se selecciona el tipo de trayectoria que la funcion seguira para graficos 2D y 3D
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenu1
v_t = get(handles.popupmenu1,'Value'); % La variable v_t captura el valor seleccionado en el popmenu1
global tray1; % Variable tray1 para representar el tipo de la Trayectoria (Uno, Dos o Tres)
switch v_t % Se elige la Trayectoria a seguir
case 1 % Si se selecciono 1
tray1 = 1; % Entonces la variable tray1 sera la Trayectoria 1
case 2 % Si se selecciono 2
tray1 = 2; % Entonces la variable tray1 sera la Trayectoria 2
case 3 % Si se selecciono 3
tray1 = 3; % Entonces la variable tray1 sera la Trayectoria 3
end

% popupmenu1 es la ventana en la interface de GUI de donde se selecciona el tipo de trayectoria que la funcion seguira para graficos 2D y 3D
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% popupmenu2 es la ventana en la interface de GUI de donde se selecciona el Eje con respecto al que la funcion rotara para graficos 2D y 3D
function popupmenu2_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenu2
v_r = get(handles.popupmenu2,'Value'); % La variable v_r captura el valor seleccionado en el popmenu2

global rotar; % Variable rotar para representar con respecto a que Eje se rotara (X - Y - Z)
global xk1; % Esta variable xk1 no tiene uso en esta parte del programa. Se reserva para posterior uso
global yk1; % Esta variable yk1 no tiene uso en esta parte del programa. Se reserva para posterior uso
global zk1; % Esta variable zk1 no tiene uso en esta parte del programa. Se reserva para posterior uso
global m % Esta variable m no tiene uso en esta parte del programa. Se reserva para posterior uso
global eje_a % Esta variable eje_a no tiene uso en esta parte del programa. Se reserva para posterior uso

switch v_r % Se elige el Eje con respecto al cual se rotara


case 1 % Si se selecciono 1
rotar = 1; % Entonces la variable rotar sera la rotacion respecto al Eje X
case 2 % Si se selecciono 2
rotar = 2; % Entonces la variable rotar sera la rotacion respecto al Eje Y
case 3 % Si se selecciono 3
rotar = 3; % Entonces la variable rotar sera la rotacion respecto al Eje Z
case 4 % Si se selecciono 4
rotar = 4; % Entonces la variable rotar sera la rotacion respecto a un Eje Arbitrario
end

% popupmenu2 es la ventana en la interface de GUI de donde se selecciona el Eje con respecto al que la funcion rotara para graficos 2D y 3D
function popupmenu2_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% edit6 es la ventana en la interface de GUI donde se ingresa el valor de la coordenada X del Eje Arbitrario para graficos 2D y 3D
function edit6_Callback(hObject, eventdata, handles)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit6 as text


% str2double(get(hObject,'String')) returns contents of edit6 as a double

% edit6 es la ventana en la interface de GUI donde se ingresa el valor de la coordenada X del Eje Arbitrario para graficos 2D y 3D
function edit6_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% edit7 es la ventana en la interface de GUI donde se ingresa el valor de la coordenada Y del Eje Arbitrario para graficos 2D y 3D
function edit7_Callback(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit7 as text


% str2double(get(hObject,'String')) returns contents of edit7 as a double

% edit7 es la ventana en la interface de GUI donde se ingresa el valor de la coordenada Y del Eje Arbitrario para graficos 2D y 3D
function edit7_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% edit8 es la ventana en la interface de GUI donde se ingresa el valor de la coordenada Z del Eje Arbitrario para graficos 2D y 3D
function edit8_Callback(hObject, eventdata, handles)
% hObject handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit8 as text


% str2double(get(hObject,'String')) returns contents of edit8 as a double

% edit8 es la ventana en la interface de GUI donde se ingresa el valor de la coordenada Z del Eje Arbitrario para graficos 2D y 3D
function edit8_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

You might also like