RNAInSpace/Сферическое кратчайшее расстояние: различия между версиями

Материал из testwiki
Перейти к навигации Перейти к поиску
 
(нет различий)

Текущая версия от 17:02, 16 марта 2017


Задача

Есть координаты двух точек в пространстве. Нужна функция, которая возвращает "расстояние", которое по поверхности сферы более короткое, чем при отклонении от поверхности сферы.

Расстояние между двумя точками на сфере - известно как считать, но вопрос в том, как сделать так, чтобы:

  1. его преобразовать через функцию так, чтобы оно было меньше, чем по прямой
  2. а точнее ПОСТЕПЕННО увеличивалось бы, если отклоняется от траектории по поверхности сферы


Ответ

Расстояние между точками (x1,y1,z1) и (x2,y2,z2) с нужными свойствами выглядит так: <poem>

r1=sqrt(x1*x1+y1*y1+z1*z1);
r2=sqrt(x2*x2+y2*y2+z2*z2);
a=acos((x1*x2+y1*y2+z1*z2)/r1/r2);
b=ln(r1/r2);
return sqrt(a*a+b*b);

</poem>

То есть, мы вычисляем центральный угол между точками, логарифм отношения их расстояний до центра и возвращаем корень из суммы их квадратов. Для точек на сфере «расстояние» будет равно центральному углу между ними, а если мы от сферы отойдём, то расстояние увеличится.

Расстояние между двумя точками на сфере

Шаблон:См. также

    • Если заданы сферические координаты точки, то переход к декартовым осуществляется по формулам:
      {x=rsinθcosφ,y=rsinθsinφ,z=rcosθ.
    • Обратно, от декартовых к сферическим:
      {r=x2+y2+z2,θ=arccos(zx2+y2+z2)=arctg(x2+y2z),φ=arctg(yx).

Шаблон:См. также

Если даны сферические координаты двух точек, то расстояние между ними можно найти так:

L=Rarccos(cosθ1cosθ2cos(ϕ1ϕ2)+sinθ1sinθ2).

См. также