原谅我在大佬云集的地方撒野。。。。我只是很快乐而已。。。
// // Created by lenovo on 2018/3/25. // #ifndef VECTOR_VECTOR_H #define VECTOR_VECTOR_H #include <iostream> class vector{ public: enum Mode{RECT,POL};//RECT for rectangular,POL for polar modes private: double x; double y; double mag; double ang; Mode mode; void set_mag(); void set_ang(); void set_x(); void set_y(); public: vector(); vector(double n1,double n2,Mode form=RECT); void reset(double n1,double n2,Mode form=RECT); ~vector(); double xval() const{return x;} double yval() const{return y;} double magval() const{return mag;}//magnitude double angval() const{return ang;}//angle void polar_mode();//set mode to pol void rect_mode();//set mode to RECT //operation vector operator+(const vector &b) const; vector operator-(const vector &b) const; vector operator-() const; vector operator*(double n) const; friend std::ostream &operator<<(std::ostream &os, const vector &v); }; #endif //VECTOR_VECTOR_H
。。。。。。
// // Created by lenovo on 2018/3/25. // #include <iostream> #include "vector.h" #include <cmath> using namespace std; const double Rad_to_deg=45.0/atan(1.0); void vector::set_mag() { mag=sqrt(x*x+y*y); } void vector::set_ang() { if(x==0.0 && y==0.0) ang=0.0; else ang=atan2(y,x); } void vector::set_x() { x=mag*cos(ang); } void vector::set_y() { y=mag*sin(ang); } vector::vector() { x=y=mag=ang=0.0; mode=RECT; } vector::vector(double n1, double n2, Mode form) { mode=form; if(form==RECT){ x=n1; y=n2; set_mag(); set_ang(); } else if(form==POL){ mag=n1; ang=n2/Rad_to_deg; set_x(); set_y(); } else{ cout<<"Incorrect arguments. vector set to 0.0\n"; x=y=mag=ang=0.0; mode=RECT; } } void vector::reset(double n1, double n2, Mode form) { mode=form; if(form==RECT){ x=n1; y=n2; set_mag(); set_ang(); } else if(form==POL){ mag=n1; ang=n2/Rad_to_deg; set_x(); set_y(); } else{ cout<<"Incorrect arguments. vector set to 0.0\n"; x=y=mag=ang=0.0; mode=RECT; } } vector::~vector() { } void vector::polar_mode() { mode=POL; } void vector::rect_mode() { mode=RECT; } vector vector::operator+(const vector &b) const { return vector(x+b.x,y+b.y);//使用构造函数 } vector vector::operator-(const vector &b) const { return vector(x-b.x,y-b.x); } vector vector::operator-() const { return vector(-x,-y); } vector vector::operator*(double n) const { return vector(n*x,n*y); } std::ostream &operator<<(std::ostream &os,const vector &v){ if(v.mode==vector::RECT) os<<"(x,y) = ("<<v.x<<" , "<<v.y<<" )"; else if(v.mode==vector::POL){ os<<"(m,a)=("<<v.mag<<"," <<v.ang*Rad_to_deg<<")"; } else os<<"Vectorobjectmodeisinvalid"; return os; }
#include <iostream> #include "vector.h" #include <cstdlib> #include <ctime> int main() { using namespace std; srand(time(0)); double direction; vector step; vector result(0.0,0.0); unsigned long steps=0; double target; double dstep; cout<<"Enter the target distance: "; while(cin>>target){ cout<<"Enter step lengh: "; if(!(cin>>dstep)) break; while(result.magval()<target){ direction=rand()%360; step.reset(dstep,direction,vector::POL); result=result+step; steps++; } cout<<"After "<<steps<<" steps, the subject has the following location:\n"; cout<<result<<endl; result.polar_mode(); cout<<"or\n"<<result<<endl; cout<<"Average outward distance per step = " <<result.magval()/steps<<endl; steps=0; result.reset(0.0,0.0); cout<<"Enter target distance :"; } cout<<"Bye\n"; cin.clear(); while(cin.get()!='\n') continue; return 0; }
我觉得很多人都看得懂,哦不是,没有人看,所以我都没写注释,需要的可以私戳我。。。