C++漫步者问题模拟

来源:互联网 发布:pptv网络电视在线 编辑:程序博客网 时间:2024/05/17 05:54
#include <iostream>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;

//随机漫步问题

class Vector
{
private:
double mag;//极坐标长度
double dir;//极坐标方向
public:
Vector();
Vector(double m,double d);
double magval()
{
return mag;
}
double dirval()
{
return dir;
}
Vector operator+(const Vector &v)
{
//先化作直角坐标
float x=mag*cos(dir);
float y=mag*sin(dir);

float v_x=v.mag*cos(v.dir);
float v_y=v.mag*sin(v.dir);

float x_total=x+v_x;
float y_total=y+v_y;

return Vector(sqrt((x_total*x_total+y_total*y_total)),atan2(y_total,x_total));
}

};
Vector::Vector()
{
mag=0;
dir=0;
}
Vector::Vector(double m,double d)
{
mag=m;
dir=d;
}
int main()
{
srand(time(0));
Vector result(0.0,0.0);
double direction;
int steps=0;
//直至漫步到距离为50的地方才停止
while(result.magval()<50)
{
//随机生成指定步数的向量
direction=rand()%360;
Vector temp(2,direction);
//走一步
result=result+temp;
steps++;
}
cout<<"steps="<<steps<<endl;

return 0;
}
原创粉丝点击