Преобразовать полярные координаты в декартовы

Системы координат, проекции, преобразования, привязка
Ответить
Slon747
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2015, 20:58
Репутация: 0

Преобразовать полярные координаты в декартовы

Сообщение Slon747 » 03 дек 2015, 17:54

Помогите пожалуйста преобразовать полярные координаты в декартовы.
Возвращает не верный результат.
Что не так?

Код: Выделить всё

//координаты в полярной системе (в радианах)
longitude = 0.820304;
longitude = 0.64577;

r = 6371; //радиус Земли

//получаем декартовы координаты
x = r * cos(latitude) * cos(longitude);
y = r * cos(latitude) * sin(longitude);
z = r * sin(latitude);

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Преобразовать полярные координаты в декартовы

Сообщение trir » 03 дек 2015, 19:35


Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Преобразовать полярные координаты в декартовы

Сообщение Ariki » 03 дек 2015, 22:27

Два раза присваиваете разные значения longitude, вот что.

Только если пишете "возвращает неверный результат", пожалуйста, указывайте, что именно возвращает и что, по вашему мнению, является верным результатом.

Slon747
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2015, 20:58
Репутация: 0

Re: Преобразовать полярные координаты в декартовы

Сообщение Slon747 » 04 дек 2015, 10:28

Ariki писал(а):Два раза присваиваете разные значения longitude, вот что.
Да, я переводил с Java в математический вид и просто ошибся.
Вот мой исходный код:

Код: Выделить всё

//координаты в полярной системе
double lat = 47;
double lon = 37;

//переводим в радианы
double lat_radian = Math.toRadians(lat);
double lon_radian = Math.toRadians(lon);

final double r = 6371.; // Радиус Земли

//получаем декартовы координаты
double x = r * cos(lat_radian) * cos(lon_radian);
double y = r * cos(lat_radian) * sin(lon_radian);
double z = r * sin(lat_radian);
Перевод в радианы верный. Проверял.
Ariki писал(а): Только если пишете "возвращает неверный результат", пожалуйста, указывайте, что именно возвращает и что, по вашему мнению, является верным результатом.
Вот тут получаю заведомо верный результат преобразования: http://keisan.casio.com/exec/system/1223527679
LatLng(47,37) возвращает в декартовых:
x=37.5359
y=28.2853

Тот-же результат выдает и на другом web-ресурсе.
У меня же по формуле получается:
x=3437.3313957
y=2642.7014421

P.S. Читал документацию, что дал trip. Различий в формулах не нашел.

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Преобразовать полярные координаты в декартовы

Сообщение trir » 04 дек 2015, 10:38


Slon747
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2015, 20:58
Репутация: 0

Re: Преобразовать полярные координаты в декартовы

Сообщение Slon747 » 04 дек 2015, 10:55

Вообще то я ошибся при получении "заведомо" верных декартовых координат.
На том ресурсе нужно в R вводить радиус Земли. Но всё равно результат не совпадает с моим:
4,345.011552
4,659.45443
Работаю с картой.
Есть прямая, обозначенная точками A и B.
Есть точка С.
Требуется провести перпендикуляр на прямую AB.
Точность требуется не высокая (на глаз).
Нашел алгоритм, но понял, что результат сильно зависит от широты.
Пытаюсь преобразовать в декартовы, получить точку, а потом вернуть в полярные (Lat, Lng)

Про мыслителей не понял.

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Преобразовать полярные координаты в декартовы

Сообщение trir » 04 дек 2015, 11:20


Slon747
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2015, 20:58
Репутация: 0

Re: Преобразовать полярные координаты в декартовы

Сообщение Slon747 » 04 дек 2015, 12:27

Что мне даст угловая засечка?

gamm
Гуру
Сообщения: 4069
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1064
Ваше звание: программист
Откуда: Казань

Re: Преобразовать полярные координаты в декартовы

Сообщение gamm » 04 дек 2015, 13:53

А что вам даст проекция вашей прямой на плоскость экватора? Вам намекают, что вы не туда проецируете (это про Маркса)

[ Сообщение с мобильного устройства ]

Slon747
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2015, 20:58
Репутация: 0

Re: Преобразовать полярные координаты в декартовы

Сообщение Slon747 » 04 дек 2015, 14:20

gamm писал(а):А что вам даст проекция вашей прямой на плоскость экватора? Вам намекают, что вы не туда проецируете (это про Маркса)
Я уже понял, что на том ресурсе используются полярные координаты на плоскости, а мне нужны сферические.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Преобразовать полярные координаты в декартовы

Сообщение Ariki » 04 дек 2015, 14:36


gamm
Гуру
Сообщения: 4069
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1064
Ваше звание: программист
Откуда: Казань

Re: Преобразовать полярные координаты в декартовы

Сообщение gamm » 04 дек 2015, 15:19

Slon747 писал(а):Я уже понял, что на том ресурсе используются полярные координаты на плоскости, а мне нужны сферические.
сферические вам тоже не нужны. Вам нужна любая равноугольная проекция, можно вообще взять азимутальную вдоль линии с началом координат в начале линии. В проекции построить перпендикуляр, и вернуть назад. Проекции считает PROJ4, либо напрямую, либо через GDAL (точнее, ogr2ogr). Все скачивается легально и бесплатно, например, и много где еще (есть в том же QGIS)

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Преобразовать полярные координаты в декартовы

Сообщение Ariki » 04 дек 2015, 16:18

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

Хотя если учесть, что в качестве входных данных нам дана "прямая на карте", то работать надо в проекции этой карты. На сфере-то никаких прямых нет, есть ортодромии и локсодромии. А на эллипсоиде всё ещё интереснее.

Slon747
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2015, 20:58
Репутация: 0

Re: Преобразовать полярные координаты в декартовы

Сообщение Slon747 » 04 дек 2015, 17:36

Я в итоге решил построить треугольник по известным сторонам (расстояния между точками известны).
И потом, получив высоту треугольника, получить длину нового отрезка катета. Он и будет тем смещением внутри отрезка А и В, которое мне нужно.

Ответить

Вернуться в «Координаты и привязка»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость