Страница 1 из 1

Кратчайшее расстояние на сфере

Добавлено: 21 мар 2012, 13:14
sipk
Добрый день, уважаемые коллеги! Прошу помочь с таким вопросом - есть две точки, заданные в ГЕО-координатах в WGS-84 (долгота и широта). Необходимо найти кратчайшее расстояние от "прямой", соединяющей эти точки, до любой другой точки, заданной также в ГЕО-координатах. Прямая здесь становится дугой и кратчайшее расстояние (перпендикуляр) тоже. Подскажите пожалуйста формулы, как все расчеты перенести на "сферическую" геометрию (расстояние на 1 градус по долготе будет разным в зависимости от широты, на которой производится замер).

Re: Кратчайшее расстояние на сфере

Добавлено: 21 мар 2012, 13:24
Denis Rykov

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

Constants:
Radius of the Earth in miles
EARTH_RADIUS = 3958.75

Ratio of a circle's circumference to its diameter
PI = 3.1415926535897932384626433832795

Factor to convert decimal degrees to radians
DEG2RAD =  0.01745329252

Factor to convert radians to decimal degrees
RAD2DEG = 57.29577951308

Great Circle Distance:
Inputs are 2 coordinates x1,y1 and x2,y2

  Convert to radians
  x1 = x1 * DEG2RAD
  y1 = y1 * DEG2RAD
  x2 = x2 * DEG2RAD
  y2 = y2 * DEG2RAD
  
  a = sin(( y2-y1 ) / 2.0 )^2
  b = sin(( x2-x1 ) / 2.0 )^2
  c = sqrt( a + cos( y2 ) * cos( y1 ) * b )

  distance = 2 * asin( c ) * EARTH_RADIUS

Re: Кратчайшее расстояние на сфере

Добавлено: 21 мар 2012, 13:25
Александр Мурый
Эту статью читали?

Re: Кратчайшее расстояние на сфере

Добавлено: 21 мар 2012, 14:06
sipk
amuriy писал(а):Эту статью читали?
Да, спасибо. Вопрос именно в алгоритме поиска расстояния до "отрезка" (не прямая, а отрезок, я неправильно выразился в первом посте). Получается, задача сводится к поиску точки пересечения дуги большого круга, заданной началом и концом и дуги, являющейся сферическим перпендикуляром к ней (опущенным из третьей заданной точки). Затем расстояние определяем по формуле (2) из статьи. Весь вопрос, как искать тогда точку пересечения (или узнать, что она не принадлежит отрезку, т. е. дуге). Если кто решал такую задачу, отзовитесь пожалуйста)

Re: Кратчайшее расстояние на сфере

Добавлено: 21 мар 2012, 14:08
sipk
Denis Rykov писал(а):

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

Constants:
Radius of the Earth in miles
EARTH_RADIUS = 3958.75

Ratio of a circle's circumference to its diameter
PI = 3.1415926535897932384626433832795

Factor to convert decimal degrees to radians
DEG2RAD =  0.01745329252

Factor to convert radians to decimal degrees
RAD2DEG = 57.29577951308

Great Circle Distance:
Inputs are 2 coordinates x1,y1 and x2,y2

  Convert to radians
  x1 = x1 * DEG2RAD
  y1 = y1 * DEG2RAD
  x2 = x2 * DEG2RAD
  y2 = y2 * DEG2RAD
  
  a = sin(( y2-y1 ) / 2.0 )^2
  b = sin(( x2-x1 ) / 2.0 )^2
  c = sqrt( a + cos( y2 ) * cos( y1 ) * b )

  distance = 2 * asin( c ) * EARTH_RADIUS
Спасибо, это расстояние между двумя географическими точками, требуется от точки до прямой)

Re: Кратчайшее расстояние на сфере

Добавлено: 21 мар 2012, 14:12
Denis Rykov
Ok. Оставлю, так как соответствует теме топика.