![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
seism |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.8.2015 Репутация: нет Всего: нет |
Доброго времени суток) Пишу программу для перевода географических координат в линейные., но координаты переводятся с ошибками, значения не совпадают с правильными. Может кто сталкивался с этим и подскажет, что там не верно? Вот код:
задаём географический центр и переводим его в начало координат: $cfi=54*pi/180; $cla=109*pi/180; $GR=111.1111111* 180/pi; #km $cosdd0=sin($cfi)*sin($cfi)+cos($cfi)*cos($cfi)*cos($cla-$cla); if ($cosdd0>=1){ $dd0=0.000000000000000000000000000000000000000000000000001 } elsif($cosdd0<=-1){ $dd0=pi #$dd0=floor( ($earthRadius * pi * 100.0) / 100.0, 0) } else{ $dd0=acos($cosdd0) } $cosA=(sin($cfi)-sin($cfi)*cos($dd0))/(cos($cfi)*sin($dd0)); if ($cosA>=1){ $A=0 } elsif($cosA<=-1){ $A=pi } else{ $A=acos($cosA) } $x0=$dd0*$GR*sin($A); $y0=$dd0*$GR*cos($A); переводим каждую точку в линейные координаты: $cosdd0=(sin($cfi)*sin($fi*pi/180))+(cos($cfi)*cos($fi*pi/180)*cos($la*pi/180-$cla)); if ($cosdd0>=1){ $dd0=0.000000000000000000000000000000000000000000000000001 } elsif($cosdd0<=-1){ #$dd0=floor( ($earthRadius * pi * 100.0) / 100.0, 0) $dd0=pi } else{ $dd0=acos($cosdd0) } if($dd0==0.000000000000000000000000000000000000000000000000001){ $sindd0=0.0000000000000000000000000000000000000000000000000001 } else{ $sindd0=sin($dd0) } $a1=sin($fi*pi/180)-sin($cfi)*$cosdd0; $a2=cos($cfi)*$sindd0; $cosA=$a1/$a2; #$cosA=(sin($fi*pi/180)-sin($cfi*pi/180)*cos($dd0))/(cos($cfi*pi/180)*sin($dd0)); if ($cosA>=1){ $A=0 } elsif($cosA<=-1){ $A=pi } else{ $A=acos($cosA) } #if (sin ($la - $cla) < 0) if($la*pi/180<$cla) { $A = 2*pi - $A; } $x=$dd0*$GR*sin($A); $y=$dd0*$GR*cos($A); $ll2=sqrt(($x-$x0)*($x-$x0)+($y-$y0)*($y-$y0)); $x0=$x; $y0=$y; Вот источник формул: h https://vk.com/id44806635?z=photo44806635_3.../photos44806635 https://vk.com/id44806635?z=photo44806635_3.../photos44806635 Предполагаю, что ошибка где-то в тригонометрических функциях. Если Вы посмотрели программу и считаете, что там всё верно, пожалуйста, про это тоже пишите. Заранее спасибо. |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
Возможно, кто-то с логином вконтактике меня поправит, но кажэтся это бездарный пиар то ли паблика то ли бота в этой соц.сети.
Во всяком случае, зайдя со своего браузера -- я там увидел личную страничку какой-то жэнщины, какие-то перепосты смешных картинок с чего-то вроде адми и никаких формул. PS Да, формулы в посте явно написаны под действием какого-то упорина, поскольку безсмысленны чуть менее чем полностью. |
|||
|
||||
seism |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.8.2015 Репутация: нет Всего: нет |
Вот формулы:
Fi0, la0 – координаты точки, в которую поместили начало отсчёта (54 и 109 градусов соответственно), fi, la – текущая широта и долгота. Эти точки переводим в радианы. 1. Между этими точками в радианах: d=arccos(sin(fi0)*sin(fi)+cos(fi0)*cos(fi)*cos(la-la0)) 2. Находим угол между направлением на север и направлением от начала координат на текущую точку: A=arcos(( sin(fi)-sin(fi0)*cos(d))/(cos(fi0)*cos(d))) 3. K=111.1111111*180/pi 4. Вычисляем x и y в километрах: X=d*K*sin(A) y=d*K*cos(A) Взяты в сборнике "Исследования по поискам предвестников землетрясений в Сибири". Только там для градусов, а perl с радианами работает. В программе коэффициент K называется GR. В прикреплённом файле формулы (страница из сборника) Это сообщение отредактировал(а) seism - 29.8.2015, 11:14 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |