и опять о расстоянии меж точками (+)

Основной форум пользователей GPS (Global Positioning System)
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.

OcM
Сообщения: 79
Зарегистрирован: 18 сен 2002, 13:35

:)

Сообщение OcM » 16 июн 2003, 23:18

А я поверил :)

не, проблема не в этом :) было бы очень просто!


kg_vista
Сообщения: 2585
Зарегистрирован: 31 июл 2002, 17:07

#":&@!!!

Сообщение kg_vista » 17 июн 2003, 12:06

А зря...

----------------------------------------------
const double c_A = 6378137;
const double c_a = 1/298.257223563;
const double c_e2 = 2*c_a - c_a*c_a;

float Distance (const point_t & _1, const point_t & _2) {
const double fSinB1 = ::sin (_1.y*c_PI/180);
const double fCosB1 = ::cos (_1.y*c_PI/180);
const double fSinL1 = ::sin (_1.x*c_PI/180);
const double fCosL1 = ::cos (_1.x*c_PI/180);

const double N1 = c_A/::sqrt (1 - c_e2*fSinB1*fSinB1);

const double X1 = N1*fCosB1*fCosL1;
const double Y1 = N1*fCosB1*fSinL1;
const double Z1 = (1 - c_e2)*N1*fSinB1;

const double fSinB2 = ::sin (_2.y*c_PI/180);
const double fCosB2 = ::cos (_2.y*c_PI/180);
const double fSinL2 = ::sin (_2.x*c_PI/180);
const double fCosL2 = ::cos (_2.x*c_PI/180);

const double N2 = c_A/::sqrt (1 - c_e2*fSinB2*fSinB2);

const double X2 = N2*fCosB2*fCosL2;
const double Y2 = N2*fCosB2*fSinL2;
const double Z2 = (1 - c_e2)*N2*fSinB2;

const double D = ::sqrt ((X1 - X2)*(X1 - X2) + (Y1 - Y2)*(Y1 - Y2) + (Z1 - Z2)*(Z1 - Z2));

const double R = c_A;
const double D2 = 2*R*::asin (.5*D/R);

return D2;
}

void main () {
point_t pt1 (36.91672f, 55.73837f);
point_t pt2 (37.35804f, 57.14513f);
cout << Distance (pt1, pt2);
}
----------------------------------------------

Выдает, между прочим, 158,989 км. А если широту с долготой переставить - 130 км.

И еще: разница между хордой D и дугой D2 на таком расстоянии составляет лишь 4 метра.

"Разморозьте курицу" (с) Boeing


Anonym
Сообщения: 15897
Зарегистрирован: 06 фев 2017, 18:49

И еще одна проверка

Сообщение Anonym » 17 июн 2003, 14:59

Действительно, Ozi дает относительную погрешность в определении расстояния между waypoints в пределах десятых долей процента.
Решил проверить при больших расстояниях. Откопал в учебнике по высшей геодезии формулы для решения обратной геодезической задачи на эллипсоиде Красовского,
набросал аналогичную функцию на C, проверил коэффициенты по контрольным примерам (а это самое большое мучение - найти, где в книге допущена опечатка) Нет, кажется сошлось.

Значит, так: между точками
A (широта 60 градусов; долгота 30 градусов) и
B (53 ; 158 градусов) (координаты на эллипсоиде Красовского)
геодезическая линия имеет длину 6647.086 км.
OziExplorer дает 6653.9628 км.

Полагаю, дело в коэффициентах, положенных в основу. Наверное, как и написано,
это расстояние по дуге окружности. Только вот какой радиус положил в основу автор? - наверное, поэтому и расхождение.



OcM
Сообщения: 79
Зарегистрирован: 18 сен 2002, 13:35

:o)

Сообщение OcM » 17 июн 2003, 18:09

Сыплю голову пеплом :)
Ну у меня всегда такие ошибки, серьезного мало, а гемороя много :)

Я наивный албанец просто не стал учитывать Z координату, так как откровенно пологал, что при переводе в прямоугольные координаты, да еще без учета высоты третья координата не нужна :)

Между делом, раскопал астрономическую методику подсчета координат, так там предлагается, для территории России делать поправку в 11 минут, тогда точность вроде как возрастает при испльзовании экваториального радиуса.

Теперь понятно, почему гориозонтали лучше считались, чем вертикали :)
Искрене прошу прощения за потраченное время! Но то, что одним умнее больше стало, то смело заслугу приписывай на свое имя!

СПАСИБО!




Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 148 гостей