Angulos entre Vectores R3

Buen dia Amigo, Colega, Gente que viene de google a encontrar respuestas, espero que este blog pueda solucionar algunos de ellos. Hoy aprenderemos un poco de Física, utilizando rectas en el plano, este es un problema propuesto por el maestro Zuñiga, que me enseño Algoritmos I, en el primer ciclo. Dice asi: "Diseña un programa C++, que solicite 2 vectores desde el teclado y calcule su producto escalar y su producto vectorial."




Bien, he visto necesario realizar este problema con Funciones, ya que muchas de ellas se invocan para realizar calculos en muchas oportunidades, bien explicare algunas de ellas:

int ProdEsc(int a[3], int b[3]);
Como estamos observando, esta funcion pedira a los dos vectores "A" y "B", con sus 3 elementos, para procesarlos y obtener un numero entero. Este numero es el producto escalar. Como lo hace?, con la sigueinte Ecuación.


En nuestro compilador favorito DEVC++, seria de la siguiente manera:
for(i=1;i<=3;i++){pe=(a[i]*b[i])+pe;}

Esto multiplicara los primeros indices de ambos vectores, y nos dara como resultado la suma de ellos.

float Mod(int vector[3]);
Esta Función solo admite un vector, con sus respectivos elementos para procesarlos, igualmente nos guiamos de la Formula:


Para programarlo, necesitaremos conocer un poquito la libreria Math.h, para utilizar la función: double pow(double x, double y); Esta función devuelve x elevado a y, osea x^y. Utilizando un Acumulador mv, es cuestion de un for(i=1;i<=3;i++){mv=pow(vector[i],2)+ mv;}, Claro al final tenemos que retornar la Raiz Cuadrada de este resultado, como?: return sqrt(mv).

float Angulo(int a[5], int b[5]){
Para utilizar esta función, utilizaremos como parametro los 2 vectores, nos guiamos de la siguiente formula:


Este resultado seria de la siguiente manera:

return acos(ProdEsc(a, b)/(Mod(a)*Mod(b)));

Notece que el resultado de este sera un Arco, cuyo Coseno sea: ProdEsc(a, b)/(Mod(a)*Mod(b), es aqui donde utilizamos las dos funciones anteriores. Pero tu me diras, Brother que hago con ese resultado si no esta en angulos RADIANES, que es lo que realmente importa verdad?, pues para ello convertirmos este valor, en RAD, con la siguiente función:

float Rad(float x)
Como vemos esta funcion requiere como parametro un numero real, que es el resultado de la funcion anterior, con esto procesamos, de la siguiente manera:

Necesitamos PI: const float pi=3.14159265;, bien con esto multiplicamos por return x*(180/pi);, y ya tenemos ese valor en grados. Bien agradeciendo siempre su visita se despide, Dext. Cambio y fuera ...





0 comentarios: