Взаимной однозначности не нужно, нужна сюръекция (по точке сферы и углу непрерывно находим поворот). Я пытаюсь по кватернионам как-то сделать. Точку
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
зафиксируем, пусть это будет кватернион
![$i$ $i$](https://dxdy-04.korotkov.co.uk/f/7/7/a/77a3b857d53fb44e33b53e4c8b68351a82.png)
. Точка
![$B$ $B$](https://dxdy-03.korotkov.co.uk/f/6/1/e/61e84f854bc6258d4108d08d4c4a085282.png)
задаётся единичным кватернионом
![$\cos(\varphi) + B \sin(\varphi)$ $\cos(\varphi) + B \sin(\varphi)$](https://dxdy-04.korotkov.co.uk/f/7/e/9/7e9fd17c83a5fbb0de52f202fee1324b82.png)
где
![$B$ $B$](https://dxdy-03.korotkov.co.uk/f/6/1/e/61e84f854bc6258d4108d08d4c4a085282.png)
чисто мнимый кватернион нормы единица. По кватерниону надо непрерывно находить поворот, переводящий
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
в
![$B$ $B$](https://dxdy-03.korotkov.co.uk/f/6/1/e/61e84f854bc6258d4108d08d4c4a085282.png)
(при условии
![$\sin(\varphi)\neq 0$ $\sin(\varphi)\neq 0$](https://dxdy-01.korotkov.co.uk/f/c/4/7/c47b951f7df7e1256da8af8661da6b9c82.png)
). Идеально сам поворот находить в виде кватерниона.
А почему не воспользоваться стандартной формулой
вращения на единичный кватернион? В этом случае векторный кватернион
![$v'$ $v'$](https://dxdy-02.korotkov.co.uk/f/1/9/e/19ef11ed79c62a9cb46775c20450d89f82.png)
(в обозначениях статьи из вики) будет функцией исходного векторного кватерниона
![$v$ $v$](https://dxdy-03.korotkov.co.uk/f/6/c/4/6c4adbc36120d62b98deef2a20d5d30382.png)
, единичного векторного кватерниона
![$u$ $u$](https://dxdy-03.korotkov.co.uk/f/6/d/b/6dbb78540bd76da3f1625782d42d6d1682.png)
, задающего направление оси вращения (которая должна проходить через центр сферы), и угла поворота
![$\alpha$ $\alpha$](https://dxdy-01.korotkov.co.uk/f/c/7/4/c745b9b57c145ec5577b82542b2df54682.png)
. Вращение будет происходить в плоскости, ортогональной оси вращения и содержащей точки A и B (эти точки будут принадлежать окружности, образованной сечением сферы плоскостью). Если значения
![$v$ $v$](https://dxdy-03.korotkov.co.uk/f/6/c/4/6c4adbc36120d62b98deef2a20d5d30382.png)
и
![$v'$ $v'$](https://dxdy-02.korotkov.co.uk/f/1/9/e/19ef11ed79c62a9cb46775c20450d89f82.png)
(или, эквивалентно, точки A и B) фиксированы, то предпоследнее равенство в разделе "Вращение на единичный кватернион" дает (при фиксированном
![$u$ $u$](https://dxdy-03.korotkov.co.uk/f/6/d/b/6dbb78540bd76da3f1625782d42d6d1682.png)
) значение угла
![$\alpha_{\text{max}}$ $\alpha_{\text{max}}$](https://dxdy-02.korotkov.co.uk/f/d/4/d/d4dda7fcb4da7c0ec960b719822f0d9582.png)
, соответствующее кватерниону
![$v'=v'(\alpha_{\text{max}})$ $v'=v'(\alpha_{\text{max}})$](https://dxdy-04.korotkov.co.uk/f/3/8/b/38bfdd1828a080471d61a5ffa5fb720082.png)
. Здесь вектор
![$u$ $u$](https://dxdy-03.korotkov.co.uk/f/6/d/b/6dbb78540bd76da3f1625782d42d6d1682.png)
равен нормализованной на 1 (произвольной) линейной комбинации векторов
![$v+v'$ $v+v'$](https://dxdy-04.korotkov.co.uk/f/b/c/b/bcbbbf3cae6d0af47017c21e2d5cd61182.png)
и
![$v\times v'$ $v\times v'$](https://dxdy-01.korotkov.co.uk/f/0/f/e/0fe4491a7d38155168592312a2a7a68182.png)
, а сам поворот (при выбранном значении
![$u$ $u$](https://dxdy-03.korotkov.co.uk/f/6/d/b/6dbb78540bd76da3f1625782d42d6d1682.png)
) будет определяться функцией
![$v'(\alpha)$ $v'(\alpha)$](https://dxdy-01.korotkov.co.uk/f/c/6/8/c68d2497152a26fe474d272619a5021b82.png)
, где
![$0\leq\alpha\leq\alpha_{\text{max}}$ $0\leq\alpha\leq\alpha_{\text{max}}$](https://dxdy-04.korotkov.co.uk/f/b/f/e/bfed48a60c1d16ca8fe442512c01d87b82.png)
.