/*
* Created on 12 de agosto de 2011, 15:19
*/
#include <iostream>
#include <cmath>
using namespace std;
#define N 3
#define PI 3,141592
#define RPG 0,0174532
/* Definición del tipo vector de N componentes */
typedef struct {
float vector[N];
}tVector;
void pedirDatos (tVector &A, tVector&B) {
cout << "Escribe las componentes del vector A: " << endl;
for (int i=0; i<N; i++)
cin >> A.vector[i];
cout << "Escribe las componentes del vector B: " << endl;
for (int j=0; j<N; j++)
cin >> B.vector[j];
}
void pedirDatos (tVector &A) {
cout << "Escribe las componentes del vector A: " << endl;
for (int i=0; i<N; i++)
cin >> A.vector[i];
}
char menuPrincipal () {
char opcion;
cout << "----- OPCIONES -----" << endl << endl;
cout << "1: Suma escalar de dos vectores." << endl;
cout << "2: Resta escalar de dos vectores." << endl;
cout << "3: Modulo de un vector." << endl;
cout << "4: Producto escalar de dos vectores." << endl;
cout << "5: Producto vectorial de dos vectores." << endl;
cout << "6: Normalizacion de un vector." << endl;
cout << "7: Obtencion de la componente mayor de un vector." << endl;
cout << "0: Salir." << endl << endl;
cout << "Opcion:";
cin >> opcion;
return opcion;
}
tVector sumaEscalar (tVector A, tVector B) {
tVector vectorSuma;
for (int i=0; i<N; i++)
vectorSuma.vector[i]=A.vector[i]+B.vector[i];
return vectorSuma;
}
tVector restaEscalar (tVector A, tVector B) {
tVector vectorResta;
for (int i=0; i<N; i++)
vectorResta.vector[i]=A.vector[i]-B.vector[i];
return vectorResta;
}
float moduloVector (tVector A) {
float modulo;
float suma=0; //Suma de los componentes del vector
for (int i=0; i<N; i++) {
A.vector[i]*=A.vector[i];
suma+=A.vector[i];
}
modulo=sqrt(suma);
}
float productoEscalar (tVector A, tVector B) {
float producto, angulo;
cout << "Angulo que forman los vectores: ";
cin >> angulo;
angulo*=RPG;
producto=moduloVector(A)*moduloVector(B)*cos(angulo);
return producto;
}
tVector productoVectorial (tVector A, tVector B) {
tVector producto;
producto.vector[0]=A.vector[1]*B.vector[2]-A.vector[2]*B.vector[1];
producto.vector[1]=A.vector[0]*B.vector[2]-A.vector[2]*B.vector[0];
producto.vector[1]*=-1;
producto.vector[2]=A.vector[0]*B.vector[1]-A.vector[1]*B.vector[0];
return producto;
}
tVector normalizacionVector (tVector A) {
float modulo;
modulo=moduloVector(A);
for (int i=0; i<N; i++)
A.vector[i]/=modulo;
return A;
}
float componenteMayor (tVector A) {
float mayor;
if (A.vector[0]>A.vector[1])
mayor=A.vector[0];
else mayor=A.vector[1];
if (A.vector[1]>A.vector[2])
mayor=A.vector[1];
else mayor=A.vector[2];
return mayor;
}
int main() {
tVector vectorA;
tVector vectorB;
tVector vectorResultado;
char opcion;
float modulo, producto, mayor;
do {
opcion=menuPrincipal();
switch (opcion) {
/* Suma escalar de dos vectores */
case '1': {
pedirDatos(vectorA,vectorB);
vectorResultado=sumaEscalar(vectorA,vectorB);
cout << "La suma escalar de A y B es: (" << vectorResultado.vector[0]
<< "," << vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")";
}
break;
case '2': {
pedirDatos(vectorA,vectorB);
vectorResultado=restaEscalar(vectorA,vectorB);
cout << "La resta escalar de A y B es: (" << vectorResultado.vector[0]
<< "," << vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")";
}
break;
case '3': {
pedirDatos(vectorA);
modulo=moduloVector(vectorA);
cout << "|A| = " << modulo << endl << endl;;
}
break;
case '4': {
pedirDatos(vectorA,vectorB);
producto=productoEscalar(vectorA,vectorB);
cout << "Su producto escalar es: " << producto << endl << endl;
}
break;
case '5': {
pedirDatos(vectorA,vectorB);
vectorResultado=productoVectorial(vectorA,vectorB);
cout << "El producto vectorial de A y B es (" << vectorResultado.vector[0] << "," <<
vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")" << endl << endl;
}
break;
case '6': {
pedirDatos(vectorA);
vectorResultado=normalizacionVector(vectorA);
cout << "El vector asociado a A es (" << vectorResultado.vector[0] << "," <<
vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")" << endl << endl;
}
break;
case '7': {
pedirDatos(vectorA);
mayor=componenteMayor(vectorA);
cout << "La componente mayor es: " << mayor;
}
break;
case '0':
return 0;
}
} while (opcion!=0);
return 0;
}