Страница 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. Оставлю, так как соответствует теме топика.