设计starx(我们的星星)类(1)
分析
实现意图:
1、根据万有引力定律模拟计算天体运动轨迹
2、导出行星运动相关数据,使用matlab绘制运动轨迹
支持运算:平面向量的坐标运算,尽量使函数可拓展至三维空间向量运算
故而需要把所有运动学、动力学的计算通过坐标运算来实现。事实上,完成力的坐标化后,相关的物理量的坐标运算就已经完成了——只需要使用对应坐标轴方向上的力算对应的物理量即可。
:
需要计算的量 | 计算途径 |
---|---|
力 | 万有引力计算公式F = GMm/R^2 |
质量 | 物体固有 |
加速度 | Fx/m,Fy/m |
速度 | ax*Δt , ay *Δt |
时间 | 当前时刻-上次计算前瞬间时刻 |
位置 | 根据初始位置和位移量计算 |
位移量 | Xx=Vx*Δt,Yx=Vy *Δt |
注意到运动需要依据时间改变量来计算,而把时间设计进类中使困难的(哈哈哈哈我实在是做不到啊),咱就把它作为传进的参数处理,在使用这个starx类时再传入即可。相关的细节咱先不看,这里只是提到,完成starx开始使用的时候咱们再具体看。
先看看我们的星星(starx)的亚子(头文件<starx.h>)
#ifndef STARX_H
#define STARX_H
#include<vector>
using std::vector;
const vector<double>::size_type x=0,y=1;
class starx
{
public:
///构造construction
starx();
starx(double,double);//位置坐标构造
starx(const double&,const double&,const double&,const double&);//位置坐标+速度矢量
starx(const double&,const double&,const double&,const double&,const double&);//位置坐标+速度矢量+质量
void gravitation(const vector<starx>&);//引力 <来自所有施加力的星星>//计算并返回starx对象受到的合引力
void velocity(const double&);//速度//计算速度变化量并更新速度 <传入上次计算到这次前瞬间的时间变化量>
void accelerate();//加速度//计算并保存两坐标轴方向上的加速度
//运动函数 <坐标更新>
void kinesis(const double&);//计算并更新坐标信息 <传入时间该改变量>
///计算&返回member function
double distance(const starx&);//距离 //计算两星距离 <二维平面欧氏距离>
double distance2(const starx&);//距离平方
double location(const int var)const;//坐标 //返回指定的坐标值
double speed(const int var);//返回指定坐标轴方向的速度速度
double force(const int var);//返回指定坐标轴方向上的合力<向量>坐标
vector<double> vecroad(const starx&);//计算位矢差< 本->目标 >
///析构destruction
virtual ~starx();
protected:
private:
const double G=6.8;//引力常量
//平面向量坐标值
double _mass;//质量
double _radius;//半径,暂时用不上
vector<double> _location;//位置矢量
vector<double> _force;//受力矢量
vector<double> _velocity;//速度矢量
vector<double> _acceleration;//加速度矢量
};
#endif // STARX_H
可以看到在类中的力、速度、加速度、位置(位矢)都是用vector容器构造的向量来表示的,这也为我们后续的坐标运算提供了方便。
同样的理由,注意第六行
const vector<double>::size_type x=0,y=1;
这样的做之后,我们就能在成员函数中用_force[x]的形式获取星星在x坐标轴方向上的受力大小了。这是这一行存在的原因,没有的话,习惯使用0,1这种数字调用vector的值也可以,只是前一种看起来比较直观。
各个成员函数的功能都在注释中有说明
下一次我们看看各个成员函数的实现——starx.cpp文件
> https://blog.csdn.net/qq_33904382/article/details/102789576