Pull to refresh

Comments 31

в этих расчетах не учитываются гравитационные аномалии.

Как повлияют Лунные и Солнечные приливы? Не точнее ли будет по компасу и часам?

p.s. Если нужна точность то лучше это - гравиметр.

Тот самый случай, когда "результат работы программы зависит от фазы Луны" это не просто программистский фольклор.

Но ведь Земля не шар, думаю эффект ее не шарообразности может быть сравним с эффектом от вращения, что усложняет задачу

Калибровка, конечно, потребуется, но по части чувствительности геоидальность только помогает (на экваторе и ускорение есть, и от центра дальше)

Задача определения широты сводится к тому, что надо научиться измерять ускорение свободного падания с точностью (9.82-9.78)/90.0 = 0.0004444444444444547 m/c^2.

Для справки - именно на столько различается ускорение свободного падения на уровне поверхности земли и приблизительно в 150 метрах над ней. То есть грубо: поднялся на 60 этаж, а по мнению этого "акселерометра" сместился на градус к экватору.


Земля не точка, интеграл по объему нужен - гравитация сначала ростет по мере подъема.

гравитация сначала ростет по мере подъема

Это с какого такого перепугу? В процессе подъёма с поверхности Земли точка измерения удаляется от ЛЮБОЙ точки Земли, что приводит к СНИЖЕНИЮ силы тяготения. Небоскрёбами и горой на горизонте можно пренебречь.

Нет, если рассматривать подъём из километровой шахты - то да, эффект роста силы тяжести по мере подъёма на начальном этапе имеет место быть.

Интеграл по объему возьмите. То что в горизонте у земли, тянет вас в стороны, когда поднимаетесь - результирующий вектор направленный вниз поначалу будет рости. Не поленитесь - посчитайте.

Ну или поднимитесь на небоскреб и прислушайтесь к сосудам в ногах - это вполне можно даже почувствовать.

Каюсь - был неправ, пояснения в комментарии ниже.

Пишут, что величина даже больших гравитационных аномалий в 12 меньше разницы между g экватора и полюса

UFO just landed and posted this here

Акселерометром мерять координаты так-то уж очень не комильфо. Можно применить дусы и обвешать по трём плоскостям гироплтаформу, тогда сильно точнее будет. Но в любом случае не сравнится с сигналами от трех спутников, благо их уже на орбиту хорошо понавешали.

gps могут подделывать

GNSS сигналы подделывают, гравитацию не смогут.

UFO just landed and posted this here

Учитывая, что "земля имеет форму чемодана" (c) погрешность будет великовата. Ну и в любом случае долготы не хватает, так что даже если у вас есть достаточно точный акселерометр – пользы мало. Но как лабораторная работа для старшеклассников – было бы интересно. Особенно если после получения результата следующим шагом сравнить его с действительностью и всем классом обсудить причины отличий.

Можно, кстати, вторую лабу сделать по измерению угла наклона магнитных силовых линий к земной поверхности. Тут ещё несколько любопытных нюансов всплывёт – разница между магнитными и географическими полюсами, магнитные аномалии.

Нельзя полагаться на эти расчеты - например гравитация зависит от высоты, при чем нелинейно, стачала растет, потом падает. И еще куча моментов имеется.

UFO just landed and posted this here

Потому что сила тяжести определяется векторной суммой гравитационного взаимодействия всех частичек, т.е. нужно брать интеграл по объему планеты относительно положения объекта.

UFO just landed and posted this here
#include <iostream>
#include <math.h>

using namespace std;

__inline double h_triangle_equ(double a, double r)
{
    return sqrt(r*r-a*a/4.0);
}

__inline double h_triangle(double a, double b, double c)
{
    double p = (a+b+c)/2.0;
    double rv =  2.0*sqrt(p*(p-a)*(p-b)*(p-c))/a;
    return rv;
}

void sh_numeric_integral()
{
    const int alt_parts = 1000;
    const double R = 6371000.0;
    const double alt_delta = R/double(alt_parts);
    const int lat_parts = 500;
    const double lat_delta = acos(-1.0)/double(lat_parts);
    const int lon_parts = lat_parts*2;
    const double lon_delta = (2.0*acos(-1.0))/double(lon_parts);
    const double density_start = 13500;
    const double density_end = 3000;
    const double m = 1;
    const double y = R+0;
    const double x = 0.0;
    const double z = 0.0;

    double v_test = 0.0, m_planet = 0.0;
    double gravity_x = 0.0, gravity_y = 0.0, gravity_z = 0.0;
    for(int alt = 0; alt< alt_parts; alt++ )
    {
        double r_curr = double(alt+1)*alt_delta;
        double r_prev = double(alt)*alt_delta;
        double r_middle = double(alt+0.5)*alt_delta;
        double c = 2.0* r_curr * sin(lat_delta/2.0);
        double c_prev = 2.0* r_prev * sin(lat_delta/2.0);
        double density_curr = density_start+double(alt+0.5)*((density_end-density_start)/double(alt_parts));

        for(int lat = 0; lat<lat_parts; lat++ )
        {
            double lat_start = lat*lat_delta-acos(-1.0)/2.0;
            double lat_middle = lat_start+lat_delta*0.5;
            double lat_end = lat_start+lat_delta;

            double a = abs(2.0*r_curr*cos(lat_start)*sin(lon_delta/2.0));
            double b = abs(2.0*r_curr*cos(lat_end)*sin(lon_delta/2.0));

            double H = sqrt(c*c-((b-a)/2.0)*((b-a)/2.0));
            double s_curr = ((a+b)/2.0)*H;
            double h_curr = h_triangle(H,h_triangle_equ(a,r_curr),h_triangle_equ(b,r_curr));

            double a_prev = abs(2.0*r_prev*cos(lat_start)*sin(lon_delta/2.0));
            double b_prev = abs(2.0*r_prev*cos(lat_end)*sin(lon_delta/2.0));

            double H_prev = sqrt(c_prev*c_prev-((b_prev-a_prev)/2.0)*((b_prev-a_prev)/2.0));

            double s_prev = ((a_prev+b_prev)/2.0)*H_prev;
            double h_prev = alt ? h_triangle(H_prev,h_triangle_equ(a_prev,r_prev),h_triangle_equ(b_prev,r_prev)) : 0.0;

            for(int lon = 0; lon<lon_parts; lon++ )
            {
                double lon_middle = double(lon+0.5)*lon_delta-acos(-1.0);
                double cm_x = r_middle*cos(lat_middle)*sin(lon_middle);
                double cm_y = r_middle*sin(lat_middle);
                double cm_z = r_middle*cos(lat_middle)*cos(lon_middle);

                double distp2 = ((cm_x-x)*(cm_x-x)+(cm_y-y)*(cm_y-y)+(cm_z-z)*(cm_z-z));
                double dist = sqrt(distp2);

                double dv = (s_curr * h_curr)/3.0 - (s_prev * h_prev)/3.0;
                double M = dv*density_curr;

                double f = (m*M*0.0000000000667)/distp2;

                gravity_x += (cm_x-x)*f/dist;
                gravity_y += (cm_y-y)*f/dist;
                gravity_z += (cm_z-z)*f/dist;

                v_test += dv;
                m_planet += M;
            }
        }
    }

    double result_gravity = sqrt(gravity_x*gravity_x+gravity_y*gravity_y+gravity_z*gravity_z);

    double v_test_formula = (4.0*acos(-1)*R*R*R)/3.0;
    cout << "Volume test: numeric = " << v_test << ", formula = " << v_test_formula << endl;
    cout << "Planet mass: " << m_planet << endl;
    cout << "Gravity: " << result_gravity << endl;
}

int main()
{
    sh_numeric_integral();
    return 0;
}

Каюсь - был неправ, видимо мои наблюдения были обусловлены локальными особенностями и я сделал неверные выводы, сейчас написал программу и проверил - с учетом перемены плотности вещества гравитация начинает уменьшаться ниже отметки в три тысячи километров под землей и от нее вверх довольно стабильна и лишь немного падает.

Довольно похоже на Землю вышло =)
Volume test: numeric = 1.0831e+21, formula = 1.08321e+21
Planet mass: 6.09242e+24
Gravity: 9.97903

У вас орфографическая ошибка уже в заголовке.

Интересно было бы сравнить с точностью определения широты по углу наклона магнитных линий Земли к поверхности

Это был бы интересный опыт. Правда, для него желательно попутешествовать в меридианальном направлении, а это дороговато))) и интересно было бы узнать, насколько действительно влияют приливы и отливы. Время прилива и отлива (гравитационное, конечно, не волна воды, которая смещена и определяется еще р рельефом дна и глубиной) само по себе может дать координату (долготу, скорее всего, для широты мне кажется сомнительно, абсолютные значения ускорения мало меняются. Хотя вектор может сильнее? Сравнивать по осям?), если конечно способ позволит относительно точно определить момент прохода "под луной". Правда, для этого надо прибор оставить в покое как минимум на сутки.

Посмотрел тут в разных местах. Кажется, для этого нужна будет точность еще на порядки выше.

Так давно в GNSS применяется

Ocean Loading BLQ Format

Нашёл первый попавшийся пример

Hidden text
An example of the output for station Onsala in BLQ-format
$$ Ocean loading displacement
$$
$$ Calculated using olfg/olmpp of H.-G. Scherneck
$$
$$ COLUMN ORDER: M2 S2 N2 K2 K1 O1 P1 Q1 MF MM SSA
$$
$$ ROW ORDER:
$$ AMPLITUDES (m)
$$ RADIAL
$$ TANGENTL EW
$$ TANGENTL NS
$$ PHASES (degrees)
$$ RADIAL
$$ TANGENTL EW
$$ TANGENTL NS
$$
$$ Displacement is defined positive in upwards, South and West direction.
$$ The phase lag is relative to Greenwich and lags positive. The
$$ Gutenberg-Bullen Green's function is used. In the ocean tide model the
$$ deficit of tidal water mass has been corrected by subtracting a uniform
$$ layer of water with a certain phase lag globally.
$$
$$
$$ Complete <model name> : No interpolation of ocean model was necessary
$$ <model name>_PP       : Ocean model has near the station been interpolated
$$
$$ Ocean tide model: GOT00.2, long period tides from FES99
$$
$$
  Onsala
$$ GOT00.2_PP ID: Aug  16, 2001 13:35
$$ Computed by OLMPP by H G Scherneck, Onsala Space Observatory, 2001
$$ Onsala,                              RADI TANG lon/lat:   11.9264   57.3958
  .00366 .00123 .00089 .00032 .00223 .00115 .00071 .00009 .00091 .00048 .00042
  .00149 .00035 .00040 .00009 .00046 .00043 .00015 .00009 .00013 .00006 .00007
  .00069 .00027 .00020 .00004 .00029 .00014 .00009 .00004 .00003 .00002 .00001
   -62.3  -51.3  -94.8  -39.7  -57.7 -110.6  -60.3 -164.6    9.9    5.8    2.1
    87.0  114.0   57.2  126.4  102.3   35.4   97.0   -6.8 -166.3 -169.8 -177.7
   109.9  152.4   86.4  149.1   50.7  -59.4   47.7  173.6  -27.8   -1.5    7.3

Учитываю зависимость изменения g от высоты над уровнем моря - способ пригоден только для моря, но в море волны. Кажется если сделать какой то "стэдикам" для акселерометра то в море вполне можно пользоваться и точность будет соизмерима со старыми способами определения широты. То есть не очень точно, но независимо от хронометра и облачности.

"невозможно измерять координаты акселерометром в море из-за волн"

Вообще на любом движущемся объекте, поскольку он хотя бы слегка, но трясётся.

Sign up to leave a comment.

Articles