Страница 1 из 1
Преобразовать полярные координаты в декартовы
Добавлено: 03 дек 2015, 17:54
Slon747
Помогите пожалуйста преобразовать полярные координаты в декартовы.
Возвращает не верный результат.
Что не так?
Код: Выделить всё
//координаты в полярной системе (в радианах)
longitude = 0.820304;
longitude = 0.64577;
r = 6371; //радиус Земли
//получаем декартовы координаты
x = r * cos(latitude) * cos(longitude);
y = r * cos(latitude) * sin(longitude);
z = r * sin(latitude);
Re: Преобразовать полярные координаты в декартовы
Добавлено: 03 дек 2015, 19:35
trir
Re: Преобразовать полярные координаты в декартовы
Добавлено: 03 дек 2015, 22:27
Ariki
Два раза присваиваете разные значения longitude, вот что.
Только если пишете "возвращает неверный результат", пожалуйста, указывайте, что именно возвращает и что, по вашему мнению, является верным результатом.
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 10:28
Slon747
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. Различий в формулах не нашел.
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 10:38
trir
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 10:55
Slon747
Вообще то я ошибся при получении "заведомо" верных декартовых координат.
На том ресурсе нужно в R вводить радиус Земли. Но всё равно результат не совпадает с моим:
4,345.011552
4,659.45443
Работаю с картой.
Есть прямая, обозначенная точками A и B.
Есть точка С.
Требуется провести перпендикуляр на прямую AB.
Точность требуется не высокая (на глаз).
Нашел алгоритм, но понял, что результат сильно зависит от широты.
Пытаюсь преобразовать в декартовы, получить точку, а потом вернуть в полярные (Lat, Lng)
Про мыслителей не понял.
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 11:20
trir
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 12:27
Slon747
Что мне даст угловая засечка?
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 13:53
gamm
А что вам даст проекция вашей прямой на плоскость экватора? Вам намекают, что вы не туда проецируете (это про Маркса)
[ Сообщение с мобильного устройства ]
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 14:20
Slon747
gamm писал(а):А что вам даст проекция вашей прямой на плоскость экватора? Вам намекают, что вы не туда проецируете (это про Маркса)
Я уже понял, что на том ресурсе используются полярные координаты на плоскости, а мне нужны сферические.
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 14:36
Ariki
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 15:19
gamm
Slon747 писал(а):Я уже понял, что на том ресурсе используются полярные координаты на плоскости, а мне нужны сферические.
сферические вам тоже не нужны. Вам нужна любая равноугольная проекция, можно вообще взять азимутальную вдоль линии с началом координат в начале линии. В проекции построить перпендикуляр, и вернуть назад. Проекции считает PROJ4, либо напрямую, либо через GDAL (точнее, ogr2ogr). Все скачивается легально и бесплатно,
например, и много где еще (есть в том же QGIS)
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 16:18
Ariki
Я бы не стал советовать работать в проекции, не зная, с какими расстояниями работает топикстартер и что он хочет получить в итоге. Если цель - построить прямой угол, то да, можно использовать любую равноугольную проекцию, но маршрут на сфере может оказаться довольно неожиданным. Если же требуется найти кратчайшее расстояние, картографические проекции не работают, разве что расстояние это достаточно мало.
Хотя если учесть, что в качестве входных данных нам дана "прямая на карте", то работать надо в проекции этой карты. На сфере-то никаких прямых нет, есть ортодромии и локсодромии. А на эллипсоиде всё ещё интереснее.
Re: Преобразовать полярные координаты в декартовы
Добавлено: 04 дек 2015, 17:36
Slon747
Я в итоге решил построить треугольник по известным сторонам (расстояния между точками известны).
И потом, получив высоту треугольника, получить длину нового отрезка катета. Он и будет тем смещением внутри отрезка А и В, которое мне нужно.