平面物理引擎(我们的星星)1.1--准备工作

设计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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值