📄 randwalk.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;
// private methods
// calculates magnitude from x and y
void Vector::set_mag()
{
mag = sqrt ( x*x + y*y );
}
void Vector::set_ang()
{
if ( 0.0 == x && 0.0 == y )
ang = 0.0;
else
ang = atan2 ( y, x );
}
// set x from polar coordinate
void Vector::set_x()
{
x = mag * cos (ang);
}
// set y from polar coordinate
void Vector::set_y()
{
y = mag * sin (ang);
}
// public methods
Vector::Vector() // default constructor
{
x = y = mag = ang = 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;
set_mag();
set_ang();
}
else if ( 'p' == form )
{
mag = n1;
ang = n2 / Rad_to_deg;
set_x();
set_y();
}
else
{
cout<< "Incorrect 3rd argument to Vector()-- ";
cout<< "vector set to 0 \n";
x = y = mag = ang = 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;
set_mag();
set_ang();
}
else if ( 'p' == form )
{
mag = n1;
ang = n2 / Rad_to_deg;
set_x();
set_y();
}
else
{
cout<< "Incorrect 3rd argument to Vector()-- ";
cout<< "vector set to 0\n";
x = y = mag = ang = 0.0;
mode = 'r';
}
}
Vector::~Vector() // destructor
{
}
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.mag<<", "
<<v.ang * 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 + -