4分求助!(越调越乱)
查看原帖
4分求助!(越调越乱)
588042
astrading楼主2022/7/17 22:17

rt

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <cmath>
#include <vector>

using namespace std;
const int N = 39;
double G = 6.67408e-11;
double t0 = 0.01;

struct data1{
    double x, y, z;
    double vx, vy, vz;
    double ax, ay, az;
    double a, b, c, d;
    double ma;
};

data1 pt, m[N];
double tt;

int n;

int main()
{
    cin >> n;
    cin >> tt;
    for(int i = 1; i <= n; i++)
    {
        cin >> m[i].x >> m[i].y >> m[i].z;
        cin >> m[i].ma;
        cin >> m[i].vx >> m[i].vy >> m[i].vz;
    }

    while(tt > 0)
    {
        for(int i = 1; i <= n; i++)
        {
            m[i].ax = m[i].ay = m[i].az = 0;
            for(int j = 1; j <= n; j++)
            {
                if(i != j)
                {
                    double x1 = m[i].a = m[j].x - m[i].x;
                    double y1 = m[i].b = m[j].y - m[i].y;
                    double z1 = m[i].c = m[j].z - m[i].z;
                    m[i].d = sqrt(x1*x1 + y1*y1 + z1*z1);                    
                    m[i].ax += m[j].ma*G*m[i].a/(m[i].d * m[i].d * m[i].d); 
                    m[i].ay += m[j].ma*G*m[i].b/(m[i].d * m[i].d * m[i].d);
                    m[i].az += m[j].ma*G*m[i].a/(m[i].d * m[i].d * m[i].d);
                }      
            }
        }
            for(int i = 1; i <= n; i++)
            {
                m[i].x += t0*(m[i].vx += t0*m[i].ax);
                m[i].y += t0*(m[i].vy += t0*m[i].ay);
                m[i].z += t0*(m[i].vz += t0*m[i].az);
            }
        tt -= t0;
    }

    for(int i = 1; i <= n; i++)
    {
        printf("%.12lf %.12lf %.12lf\n", m[i].x, m[i].y, m[i].z);
    }
    return 0;
}
2022/7/17 22:17
加载中...