2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2, 3  След.
 
 Сферическое кратчайшее расстояние
Сообщение28.04.2012, 04:35 
Честно говоря не очень знаю как правильно называется то, что мне нужно на математическом языке.

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

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

P.S. Мне это нужно практически, поэтому теоретические премудрости математики мало интересуют (единственно сильно интересует как правильно называется эта задача, и как её решить, т.е. вид этой функции).

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 09:11 
Аватара пользователя
Короче, ничего не знаю, вот задача. Есть некая сумма денег. Её надо преобразовать через функцию так, чтобы она ПОСТЕПЕННО увеличивалась. Что посоветуете? :lol:

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 09:34 
Ну, и зачем оффтопить? Не знаете, что посоветовать - не болтайте ..

А задача поставлена более чем конкретно. (я вот только надеюсь, что специалисты-математики заговорят словами "метрика" и т.д. - вот в этом смысле задача только лишь и "недопоставлена" )

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 09:47 
Аватара пользователя
tac в сообщении #564822 писал(а):
А задача поставлена более чем конкретно.
:lol: :lol:

-- Сб, 2012-04-28, 10:49 --

Погодите, так Вам что, нужна такая особенная метрика в 3D, в которой геодезическими являются (в частности) дуги какой-то сферы?

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 13:33 
Аватара пользователя
Берем квадрат элемента длины в сферических координатах
$ds^2=dr^2+r^2 d\theta^2+r^2 \sin^2\theta d\varphi^2$
и слегка подправляем его:
$ds^2=dr^2+d\theta^2+\sin^2\theta d\varphi^2$

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

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 14:28 
svv в сообщении #564934 писал(а):
Берем квадрат элемента длины в сферических координатах
$ds^2=dr^2+r^2 d\theta^2+r^2 \sin^2\theta d\varphi^2$
и слегка подправляем его:
$ds^2=dr^2+d\theta^2+\sin^2\theta d\varphi^2$

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


Спасибо, на слух вроде как раз то, что надо ... пошел проверять :)

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 15:33 
Псс ..

Не могли бы проверить и подсказать, что-то не имея опыта меня смутила запись (точнее как ее применить в псевдокоде при программировании)

Используется синтаксис C#
// сферические координаты первой точки
                r_sf1 = Math.Sqrt(x1*x1 + y1*y1 + z1*z1);          // расстояние до начала координат
                theta1 = Math.Atan(Math.Sqrt(x1*x1 + y1*y1)/z1);   // зенитный угол
                varphi1 = Math.Atan(y1 / x1);                      // азимутальный угол

// сферические координаты второй точки
                r_sf2 = Math.Sqrt(x2 * x2 + y2 * y2 + z2 * z2);          // расстояние до начала координат
                theta2 = Math.Atan(Math.Sqrt(x2 * x2 + y2 * y2) / z2);   // зенитный угол
                varphi2 = Math.Atan(y2 / x2);                            // азимутальный угол

// Искомое "расстояние"
                r = Math.Sqrt((r_sf2 - r_sf1) * (r_sf2 - r_sf1) + (theta2 - theta1) * (theta2 - theta1)
                +  (Math.Sin(theta1)*Math.Sin(theta2)) * (varphi2 - varphi1) * (varphi2 - varphi1));
 

Правильно ли, что $\sin^2\theta$ - это тоже самое что Math.Sin(theta1)*Math.Sin(theta2)?

Да, и может я не прав - может с углами нельзя так обходится получая их d\theta^2 ? (что-то мне подсказывает, что странно складывать углы с расстоянием :( или я скорее чего-то не понимаю)

-- Сб апр 28, 2012 17:28:11 --

ИСН в сообщении #564825 писал(а):

Погодите, так Вам что, нужна такая особенная метрика в 3D, в которой геодезическими являются (в частности) дуги какой-то сферы?


Видимо это ответ на мой первый вопрос :) я же написал, что не знаю как это правильно сформулировать на мат. языке. Это соответствует тому, что посоветовал svv выше ?

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 16:45 
Аватара пользователя
Я решил до того, как проверять код на C#, сначала записать "своё видение".

Пусть даны точки $A_1(r_1, \theta_1, \varphi_1)$ и $A_2(r_2, \theta_2, \varphi_2)$ (здесь и далее указаны сферические координаты).

В новой метрике кратчайшим путем, соединяющим точки $A_1$ и $A_2$, будет некоторая кривая, которая при $r_1=r_2$ будет лежать на сфере.
Длину $s$ этого пути можно найти так:
$s^2=s_{\text{radial}}^2+s_{\text{angular}}^2=(r_2-r_1)^2+s_{\text{angular}}^2$ ,
где $s_{\text{angular}}$ -- длина кратчайшей дуги на единичной сфере, соединяющей точки $B_1(1, \theta_1, \varphi_1)$ и $B_2(1, \theta_2, \varphi_2)$. Эти точки -- "радиальные проекции" точек $A_1$ и $A_2$ на единичную сферу. Иначе -- пересечение луча, выходящего из центра сферы и проходящего соответственно через точку $A_1$ или $A_2$, с единичной сферой.

Из описания понятно, что $s_{\text{angular}}$ -- это угол между лучами $OA_1$ и $OA_2$ (или, что то же самое, между $OB_1$ и $OB_2$). Несложно найти явно:
$s_{\text{angular}}=\arccos(\sin\theta_1\sin\theta_2\cos(\varphi_2-\varphi_1)+\cos\theta_1\cos\theta_2)$

Вот такие формулы.

tac писал(а):
Это соответствует тому, что посоветовал svv выше ?
Скажем так: я не вправе расписаться за ИСН, что то, что я сделал, соответствует тому, что он имел в виду. Однако для меня его формулировка вполне соответствует тому, чего хотел я. :D

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 16:54 
svv, признавайтесь, вы — телепат. Я-то после прочтения первого поста сразу подумал "любые две точки лежат на какой-то сфере, в чем проблема-то?" и ушел... а оно вон как на самом деле.

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 17:00 
Аватара пользователя
Ну, я только учусь... :roll:

(Оффтоп)

Да, стремлюсь быть телепатом -- в том смысле, что стараюсь понять, что нужно человеку, вместо того, чтобы буквально следовать формулировке вопроса. Это потому, что я не математик, и мне самому очень трудно правильно формулировать вопросы (да и ответы) математически.


-- Сб апр 28, 2012 16:15:21 --

tac писал(а):
что-то мне подсказывает, что странно складывать углы с расстоянием
Если есть внутреннее сопротивление против такого действия (в общем, правильное), можно предложенную метрику заменить на
$ds^2=dr^2+r_0^2\,(d\theta^2+\sin^2\theta\, d\varphi^2)$

Здесь $r_0$ -- характерное для Вашей задачи расстояние от центра сферы. Скажем, если Вы пишете что-то вроде имитатора полёта в Google Earth, то это средний радиус Земли. Однако $r_0$ должно быть константой. Две выгоды от такой модификации:
1) всё в порядке с размерностями (важно для физика);
2) "расстояния" при $r\approx r_0$ становятся ближе по числовым значениям к обычным расстояниям, а на сфере $r=r_0$ просто совпадают с ними.
Формула для длины пути модифицируется так:
$s^2=(r_2-r_1)^2+r_0^2 s_{\text{angular}}^2$

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 18:36 
svv в сообщении #565052 писал(а):
Я решил до того, как проверять код на C#, сначала записать "своё видение".

Пусть даны точки $A_1(r_1, \theta_1, \varphi_1)$ и $A_2(r_2, \theta_2, \varphi_2)$ (здесь и далее указаны сферические координаты).

В новой метрике кратчайшим путем, соединяющим точки $A_1$ и $A_2$, будет некоторая кривая, которая при $r_1=r_2$ будет лежать на сфере.
Длину $s$ этого пути можно найти так:
$s^2=s_{\text{radial}}^2+s_{\text{angular}}^2=(r_2-r_1)^2+s_{\text{angular}}^2$ ,
где $s_{\text{angular}}$ -- длина кратчайшей дуги на единичной сфере, соединяющей точки $B_1(1, \theta_1, \varphi_1)$ и $B_2(1, \theta_2, \varphi_2)$. Эти точки -- "радиальные проекции" точек $A_1$ и $A_2$ на единичную сферу. Иначе -- пересечение луча, выходящего из центра сферы и проходящего соответственно через точку $A_1$ или $A_2$, с единичной сферой.

Из описания понятно, что $s_{\text{angular}}$ -- это угол между лучами $OA_1$ и $OA_2$ (или, что то же самое, между $OB_1$ и $OB_2$). Несложно найти явно:
$s_{\text{angular}}=\arccos(\sin\theta_1\sin\theta_2\cos(\varphi_2-\varphi_1)+\cos\theta_1\cos\theta_2)$




Значит действительно с углами нельзя так просто, тогда

Используется синтаксис C#
// сферические координаты первой точки
                r_sf1 = Math.Sqrt(x1*x1 + y1*y1 + z1*z1);          // расстояние до начала координат
                theta1 = Math.Atan(Math.Sqrt(x1*x1 + y1*y1)/z1);   // зенитный угол
                varphi1 = Math.Atan(y1 / x1);                      // азимутальный угол

// сферические координаты второй точки
                r_sf2 = Math.Sqrt(x2 * x2 + y2 * y2 + z2 * z2);          // расстояние до начала координат
                theta2 = Math.Atan(Math.Sqrt(x2 * x2 + y2 * y2) / z2);   // зенитный угол
                varphi2 = Math.Atan(y2 / x2);                            // азимутальный угол

// Искомое "расстояние"
                r = Math.Sqrt((r_sf2 - r_sf1) * (r_sf2 - r_sf1) + Math.Acos( Math.Sin(theta1)*Math.Sin(theta2)*Math.Cos(varphi2-varphi1) + Math.Cos(theta1) * Math.Cos(theta2)  ));
 


но соответствует ли это $ds^2=dr^2+d\theta^2+\sin^2\theta d\varphi^2$? Или я чего то напутал ?

Т.е. правильно ли я понял, что $s_{\text{angular}}$ это тоже самое, что $ d\theta^2+\sin^2\theta d\varphi^2$?

Какие-то у меня сомнения

Цитата:
Если даны сферические координаты двух точек, то расстояние между ними можно найти так:
$L = R \cdot \arccos ( \cos \theta_1 \cdot \cos \theta_2 + \sin \theta_1 \cdot \sin \theta_2 \cdot \cos (\varphi_1 - \varphi_2) ).$


это по сути то, что вы выше пояснили, но тут же не учтено, то что мы "подкорректировали метрику" с

Цитата:
$ds^2=dr^2+r^2 d\theta^2+r^2 \sin^2\theta d\varphi^2$
и слегка подправляем его:
$ds^2=dr^2+d\theta^2+\sin^2\theta d\varphi^2$


-- Сб апр 28, 2012 19:46:46 --

svv в сообщении #565063 писал(а):
Здесь $r_0$ -- характерное для Вашей задачи расстояние от центра сферы. Скажем, если Вы пишете что-то вроде имитатора полёта в Google Earth, то это средний радиус Земли. Однако $r_0$ должно быть константой.


Вы действительно, хорошо поясняете :)

И это важное дополнение, это $r_0$ получается коэффициент, который указывает по какому радиусу от центра должна огибаться траектория.

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 19:14 
Аватара пользователя
tac в сообщении #565096 писал(а):
соответствует ли это $ds^2=dr^2+d\theta^2+\sin^2\theta d\varphi^2$? Или я чего то напутал ?

Т.е. правда ли, что $s_{\text{angular}}$ это тоже самое, что $ d\theta^2+\sin^2\theta d\varphi^2$? Прямо как-то не следует ?
Формула $ds^2=dr^2+r_0^2\,(d\theta^2+\sin^2\theta\, d\varphi^2)$ (жаргонное название -- "метрика") лежит в основе построения, но прямо она не программируется.

Она определяет расстояние $ds$ между двумя бесконечно близкими точками. Она позволяет найти длину любого пути, в том числе криволинейного -- путём интегрирования. Чтобы перейти от неё к формуле для длины кратчайшего пути $s$ между двумя точками, нужно сделать две вещи, о которых я не говорил:
1) Найти, какой именно путь будет кратчайшим в данной метрике (для этого надо решить уравнение геодезических). Я такой путь для произвольной пары точек нашел и имею в виду именно его, хотя о нем не упоминал и явно его здесь не описывал.
2) Проинтегрировать $ds$ вдоль этого пути и получить уже конечное расстояние $s$, а не бесконечно малое:
$s=\int\limits_{\lambda_1}^{\lambda_2}\frac{ds}{d\lambda} d\lambda=\int\limits_{\lambda_1}^{\lambda_2}\sqrt{\left(\frac {dr}{d\lambda}\right)^2+r_0^2\,\left(\frac {d\theta}{d\lambda}\right)^2+r_0^2\,\sin^2\theta\, \left(\frac {d\varphi}{d\lambda}\right)^2} d\lambda$
Здесь $\lambda$ -- параметр кривой при её параметрическом задании. Интеграл, понятно, зависит от выбранного пути.

Вот это я проделал (местами "честно схитрил") и Вам предъявил готовый результат. Вы на него смотрите и не очень понимаете, откуда появилось столько отличий между
$ds^2=dr^2+r_0^2\,(d\theta^2+\sin^2\theta\, d\varphi^2)$ и
$s^2=(r_2-r_1)^2+r_0^2 \left(\arccos(\sin\theta_1\sin\theta_2\cos(\varphi_2-\varphi_1)+\cos\theta_1\cos\theta_2)\right)^2$ :D

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 20:00 
svv в сообщении #565107 писал(а):

Вот это я проделал (местами "честно схитрил") и Вам предъявил готовый результат. Вы на него смотрите и не очень понимаете, откуда появилось столько отличий между
$ds^2=dr^2+r_0^2\,(d\theta^2+\sin^2\theta\, d\varphi^2)$ и
$s^2=(r_2-r_1)^2+r_0^2 \left(\arccos(\sin\theta_1\sin\theta_2\cos(\varphi_2-\varphi_1)+\cos\theta_1\cos\theta_2)\right)^2$ :D


Ух, как все не просто :) Спасибо, за результат. Так, получается что и в коде тогда все в порядке теперь (см. последний вариант) ?

-- Сб апр 28, 2012 21:30:24 --

Тут еще вот какое дело. В такой вот получившейся сферической геометрии, надо еще проследить чтобы угол между 3 точками (2 из них те-же, о которых говорили выше) в пространстве приближался к 20 градусам. Тут что-то меняется в отличии от евклидовой геометрии?

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 21:59 
Углов между тремя точками, строго говоря, не бывает. Чуть менее строго их три (углы треугольника, образуемого этими точками; неважно, криволинейного ли). Какой из трёх? :wink:

 
 
 
 Re: Сферическое кратчайшее расстояние
Сообщение28.04.2012, 22:55 
arseniiv в сообщении #565200 писал(а):
Углов между тремя точками, строго говоря, не бывает. Чуть менее строго их три (углы треугольника, образуемого этими точками; неважно, криволинейного ли). Какой из трёх? :wink:


Если есть три точки A, B, C, то речь идет о угле ABC

 
 
 [ Сообщений: 33 ]  На страницу 1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group