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

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 12:
=== Ответ ===
 
Расстояние между точками (x1,y1,z1) и (x2,y2,z2) с нужными свойствами выглядит так:
Берем квадрат элемента длины в сферических координатах
<poem>
<math>ds^2=dr^2+r^2 d\theta^2+r^2 \sin^2\theta d\varphi^2</math>
r1=sqrt(x1*x1+y1*y1+z1*z1);
и слегка подправляем его:
r2=sqrt(x2*x2+y2*y2+z2*z2);
<math>ds^2=dr^2+d\theta^2+\sin^2\theta d\varphi^2</math>
a=acos((x1*x2+y1*y2+z1*z2)/r1/r2);
 
b=ln(r1/r2);
В результате этой операции геодезической становится невыгодно нырять в глубь шара, чтобы уменьшить длину пути, соединяющего две точки на поверхности.
return sqrt(a*a+b*b);
</poem>
 
То есть, мы вычисляем центральный угол между точками, логарифм отношения их расстояний до центра и возвращаем корень из суммы их квадратов. Для точек на сфере «расстояние» будет равно центральному углу между ними, а если мы от сферы отойдём, то расстояние увеличится.
 
== Расстояние между двумя точками на сфере ==