Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > вычисление дуги сферы если известны положения двух


Автор: tennisru 16.1.2012, 16:49
B первой строке действительное число - радиус планеты (не более 10 000).

Во второй строке координаты : долгота в градусах, минутах и секундах (целые числа) , буква w или e - соответствано западной или восточной, широта в градусах, минутах и секундах, буква n или s - соответственно северной или южной.

как это вычислить? 
пример
6374.0

(координата второй)0 0 0 w 0 0 0 s


(координата второй)
1 0 0 w 0 0 0 s

ответ111.247

Автор: Akina 16.1.2012, 16:51
Разности координат переводишь в угол между направлениями в точки из центра...

Автор: Pavia 16.1.2012, 18:42
Планету рассматриваем как сферу.

Берёшь две точки. Переводишь из сферических координат в прямоугольную систему координат. С центром в центре планеты. 
Вычисляешь угол между этими двумя векторами используя скалярное произведение векторов.
Зная угол находим длину дуги, через формулу окружности.

Длина окружности будет 2*pi*r  полный угол 2*pi.


Второй способ через сферическую геометрию(криволинейную геометрию)
http://ru.wikipedia.org/wiki/Сферическая_тригонометрия

Автор: tennisru 16.1.2012, 20:34
Можно спросить а как переводить изсферических координат в прямоугольную систему координат?

Автор: Pavia 16.1.2012, 21:03
Простая проекционная задача.
X=R*Cos(B)*Cos(L)
Y=R*Cos(B)*Sin(L)
Z=R*Sin(B)

B - широта
L - долгота

Автор: _Y_ 16.1.2012, 23:59
А разве нельзя посчитать сразу?

Просто находим угол в градусах между радиусами планеты, идущими к двум точкам.
А дальне длина окружности 2*пи*R соответствует 360 градусам, а дрина дуги пропорционально меньше. 

Понятное дело, что в этом случае допускаем, что земля шарообразна, а вовсе не имеет форму чемодана, как это есть на самом деле.

Добавлено через 10 минут и 23 секунды
По-моему http://hea.iki.rssi.ru/~nik/astro/spher.htm как найти угол между векторами сразу в сферических координатах.

На второй картинке нарисованы три вектора. Для Вашей задачи за третий вектор берем нулевую ось (координаты 0, 0). Углы двух других векторов от нуля известны (координаты на глобусе). Надо только преобразовать уравнения и получить третий угол.

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

Автор: tennisru 17.1.2012, 00:30
а равзе не надо учитывать где мы сейчас находимся на какой долготе и широте?
Цитата(Pavia @  16.1.2012,  21:03 Найти цитируемый пост)
X=R*Cos(B)*Cos(L)
Y=R*Cos(B)*Sin(L)
Z=R*Sin(B)


Автор: Pavia 17.1.2012, 05:34
_Y_
Если приближённо, то сразу можно. 

Цитата(_Y_ @  16.1.2012,  23:59 Найти цитируемый пост)
По-моему вот здесь описано как найти угол между векторами сразу в сферических координатах.На второй картинке нарисованы три вектора. Для Вашей задачи за третий вектор берем нулевую ось (координаты 0, 0). Углы двух других векторов от нуля известны (координаты на глобусе). Надо только преобразовать уравнения и получить третий угол.Впрочем, сейчас вечер и проверять это предположение мне влом. Может быть, чтобы упростить задачу, за третью ось лучше взять какой-то другой радиус, из которого легче будет считать углы.

Всё проще.  Берешь разницы по ширине и долготе между  первой и второй точкой. Переводишь их в длины через 2*Pi*R. Угол между этими двумя дугами известен 90 гадусов и ищещь противоположную дугу.

Автор: tennisru 17.1.2012, 15:39
Цитата(Pavia @  17.1.2012,  05:34 Найти цитируемый пост)
Угол между этими двумя дугами известен 90 гадусов и ищещь противоположную дугу

отлично
как это сделать для сферичеуского треугольника?

Цитата(Pavia @  17.1.2012,  05:34 Найти цитируемый пост)
ищещь противоположную дугу.


Автор: Pavia 17.1.2012, 18:17
tennisru
Ты хочешь чтобы мы за тебя данные подставили в формулу?

Автор: _Y_ 17.1.2012, 22:56
tennisru, Вам нужна формула (5) по той ссылке, которую я привел выше. В абзаце перед этой формулой все вроде описано.

По этой формуле находите угловое расстояние a. Радиус сферы R у Вас уже есть. Поэтому расстояние в единицах длины считаете, как я уже писал:
2*пи*R*a/360

Ура школьной стереометрии! smile 

Автор: tennisru 18.1.2012, 15:38
не по теме: 
Цитата(_Y_ @  17.1.2012,  22:56 Найти цитируемый пост)
Ура школьной стереометрии
 если ты и вправду школьник

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)