lunes, 20 de mayo de 2013

Manejo de vectores (polar, rectangular y suma)



Este programa permite pasar vectores en coordenadas polares a componentes rectangulares, sumarlos y luego presentar el resultado en coordenadas polares de nuevo. Funciona bien por lo menos para vectores con argumentos entre 0º y 90º. La cosa no sería muy allá si no utilizara clases, que eso es lo que para mí es todo un logro. La clase SexagRad y RadSexag1 están en el fichero sexagra.h que ya puse el otro día.  La clase PolarRect en el polarrect.h, que pongo al final de esta entrada. Ojo, por el momento funciona para sumar dos o tres vectores, pero se puede arreglar fácilmente.

#include<iostream>
#include<cmath>
#include<iomanip>
#include "polarrect.h"
#include "sexagra.h"
using namespace std;
int main()
{
int c;
double md[4],a[4],r;
double g[4],m[4],s[4];
double v[4][4], vr[2][2];
cout<<"Cuántos vectores: ";cin>>c;
for(int i=0;i<c;i++){
cout<<"Dame el módulo del vector: ";cin>>md[i];
cout<<"Dame el argumento del vector: grados, minutos ,segundos: ";cin>>g[i]>>m[i]>>s[i];
SexagRad ang(g[i],m[i],s[i]);
a[i]=ang.gra2sexa();
PolarRect objeto(md[i], a[i]);
v[i][1]=objeto.primcomp();
v[i][2]=objeto.segucomp();
cout<<setprecision(8);
cout<<"La primera componente es "<<v[i][1]<<endl;
cout<<"La segunda componente es "<<v[i][2]<<endl;
}
vr[0][1]=v[0][1]+v[1][1]+v[2][1];
vr[0][2]=v[0][2]+v[1][2]+v[2][2];
r=atan(vr[0][2]/vr[0][1]);
cout<<"Las componentes de la suma de los vectores son: "<<vr[0][1]<<" y "
<<vr[0][2]<<endl;
cout<<"El módulo de la resultante es "<<sqrt(vr[0][1]*vr[0][1]+vr[0][2]*vr[0][2])<<endl;
RadSexag1 angr(r);
cout<<"Su argumento "<<angr.rad2gra1()<<" grados "<<angr.rad2gra2()<<" minutos "<<angr.rad2gra3()<<" segundos"<<endl;
return 0;
}

Esta es la clase PolarRect que pasa de polares a rectangulares:


class PolarRect
{
private:
double modulo;
double argumento;
public:
PolarRect (double md, double a){
modulo = md;
argumento = a;
}
double primcomp(){
return modulo*cos(argumento);
}
double segucomp(){
return modulo*sin(argumento);
}
};

No hay comentarios:

Publicar un comentario