📄 vector.cpp
字号:
// vect.cpp -- methods for Vector class
#include <cmath>
#include "vect.h" // includes<iostream>
using namespace std;
namespace VECTOR
{
const double Rad_to_deg = 57.2957795130823;
// public methods
Vector::Vector() // default constructor
{
x = y = 0.0;
mode = 'r';
}
// construct vector from rectangular coordinates if form is r
// (the default) or else from polar coordinates if form is p
Vector::Vector (double n1, double n2, char form)
{
mode = form;
if ( 'r' == form )
{
x = n1;
y = n2;
}
else if ( 'p' == form )
{
x = n1 * cos ( n2 / Rad_to_deg );
y = n1 * sin ( n2 / Rad_to_deg );
}
else
{
cout<< "Incorrect 3rd argument to Vector()-- ";
cout<< "vector set to 0 \n";
x = y = 0.0;
mode = 'r';
}
}
// set vector fromrectangular coordinates if flrm is r
// (the default) or else from polar coordinates if form is p
void Vector::set( double n1, double n2, char form)
{
mode = form;
if ( 'r' == form )
{
x = n1;
y = n2;
}
else if ( 'p' == form )
{
x = n1 * cos ( n2 / Rad_to_deg );
y = n1 * sin ( n2 / Rad_to_deg );
}
else
{
cout<< "Incorrect 3rd argument to Vector()-- ";
cout<< "vector set to 0 \n";
x = y = 0.0;
mode = 'r';
}
}
Vector::~Vector() // destructor
{
}
double Vector::magval()const // report magnitude
{
return sqrt ( x*x + y*y );
}
double Vector::angval()const // report angle
{
if ( 0.0 == x && 0.0 == y )
return 0.0;
else
return atan2 ( y, x );
}
void Vector::polar_mode() // set to polar mode
{
mode = 'p';
}
void Vector::rect_mode() // set to rectangular mode
{
mode = 'r';
}
// operator overloading
// add two Vectors
Vector Vector::operator + (const Vector & b)const
{
return Vector( x + b.x, y + b.y );
}
// subtract Vector b from a
Vector Vector::operator - ( const Vector & b)const
{
return Vector ( x - b.x, y - b.y );
}
// reverse sign of Vecotr
Vector Vector::operator -()const
{
return Vector ( -x, -y );
}
// multiple vector by n
Vector Vector::operator * ( double n )const
{
return Vector ( n * x, n * y );
}
// friend methods
// multiply n by Vector a
Vector operator * ( double n , const Vector & a )
{
return a * n;
}
// display rectangular coordinates if mode if r,
// else display polar coordinates if mode is p
std::ostream & operator << ( std::ostream & os, const Vector & v )
{
if ( 'r' == v.mode )
os <<"(x,y) = ("<<v.x<<", "<<v.y<<")";
else if ( 'p' == v.mode )
{
os <<"(m,a) = ("<<v.magval()<<", "
<<v.angval() * Rad_to_deg<<") ";
}
else
os <<"Vector lbject mode is invalid";
return os;
}
} //end namespace VECTOR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -