Шаблон:Распространение радиоволн ВЧ/Реализация/encompassing aperture t::unify/Алгоритм
Пусть объединяются два сектора сферы, релизуемые классом классом encompassing_aperture_t - и , где - вектор направления на центральную точку -го сектора (возвращаемый методом encompassing_aperture_t::central_point), а - соответствующий ангулярный радиус (возвращаемый методом encompassing_aperture_t::radius). Сектор, у которого ангулярный радиус равен охватывает сферу полностью независимо от вектора .
В результате объединения создается новый сектор .
Вектора могут быть либо нулевыми либо единичными. Сектор с нулевым вектором направления считается нейтральным по операции объединения, т.е. .
Далее рассматривается случай, в котором .
Поскольку направленные отрезки и исходят из одной точки - центра сферы, оба отрезка принадлежат одной плоскости, причем эта плоскость является диаметральным сечением сферы. Поэтому задача поиска объединяющего сектора, то есть вектора и ангулярного радиуса , становится двумерной.
Пусть далее , где - угол между и .
Два особых случая:
- и
- .
Поэтому:
- , иначе
- .
Далее по тексту предполагается, что . Следовательно .
Существует три случая.
Рассмотрим первый случай, когда (то есть ). Поскольку длины всех векторов равны единице, , а количество плоскостей, которым одновременно могут принадлежать и бесконечно, вследствие чего количество возможных секторов минимальной площади, объединяющих и , также бесконечно и зависит от того на какой из плоскостей будут принадлежать выбранные и ; и этот выбор будет сводится к выбору диаметральной плоскости, проходящей через .
Этот выбор можно сделать, если задать произвольный вектор , перпендикулярный .
В описываемой реализации
- .
Тогда на плоскости, которой одновременно принадлежат , и , будет однозначно определен вектор , отстоящий на одинаковом угловом расстоянии от векторов и и, поэтому, параллельный вектору центральной точки сектора-объединения.
Для нахождения вектора достаточно выразить его в базисе и осуществить переход к мировой системе координат входной модели. Как видно из рисунка, в указанном базисе вектор имеет координаты
- ,
причем .
Тогда в мировых координатах
- .
Пусть и .
Тогда .
Отсюда
- ,
а ангулярный радиус будет равен
- .
Во втором случае , однако (то есть ).
Лемма
- .
Действительно, допустим .
Противоречие ограничению, приведенному выше.
Аналогично доказывается ограничение Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle 0\le\alpha_2<\frac{\pi}{2}} .
Лемма и Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \alpha_2} не могут быть одновременно равны нулю. Иначе имел бы место случай 1 выше.
Следствие
- .
Поскольку один из ангулярных радиусов обязательно ненулевой, примем ограничение Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \alpha_1>0}
(тогда ).
Решение задачи объединения сводится к поиску вектрра , перпендикулярного Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c'}_1} (и ), лежащего в плоскости Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_1} и , имеющего острый угол одновременно с Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_1} и с и нормализованного.
Поскольку вектора Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_1} и линейно-независимы, их можно использовать в качестве базиса для поиска вектора, сонаправленного с Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_{12}} , следующим образом.
Опустим перпендикуляр от конца одного из векторов, например , на вектор Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_{12}} , перперндикулярный и образующий острый угол с Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_1} . Обозначим вектор, связанный с направленным отрезком, который исходит от центра сферы к точке пересечения и проведенного перпендикуляра, как Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c'}_{12}} . Такой вектор очевидно будет сонаправлен с , а его длина будет равна
- Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \left|\vec{c'}_{12}\right|=\left|\vec{c}_1\right|\sin \alpha_1=\sin \alpha_1} ;
- .
Обозначим как Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c'}_{12,\left\langle\vec{c}_1,\vec{c}_2\right\rangle,x}} и Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle {\vec {c'}}_{12,\left\langle {\vec {c}}_{1},{\vec {c}}_{2}\right\rangle ,y}} соответственно проекции вектора Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c'}_{12}} на и Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_2} а равно координаты вектора в базисе Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \left\langle\vec{c}_1,\vec{c}_2\right\rangle} . Из теоремы синусов следует, что
- Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \frac{\sin \left(\alpha_1+\alpha_2\right)}{\left|\vec{c'}_{12}\right|}= \frac{\sin \left(\alpha_1+\alpha_2\right)}{\sin \alpha_1}= \frac{\sin \left(\frac{\pi}{2} - \alpha_2\right)}{\left|\vec{c'}_{12,\left\langle\vec{c}_1,\vec{c}_2\right\rangle,x}\right|}= \frac{\cos \alpha_2}{\left|\vec{c'}_{12,\left\langle\vec{c}_1,\vec{c}_2\right\rangle,x}\right|}= \frac{\sin \left(\frac{\pi}{2} - \alpha_1\right)}{\left|\vec{c'}_{12,\left\langle\vec{c}_1,\vec{c}_2\right\rangle,y}\right|}= \frac{\cos \alpha_1}{\left|\vec{c'}_{12,\left\langle\vec{c}_1,\vec{c}_2\right\rangle,y}\right|}} .
Тогда в базисе Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \left\langle\vec{c}_1,\vec{c}_2\right\rangle} вектор Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c'}_{12}} будет равен:
- Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle {\vec {c'}}_{12}={\frac {\sin \alpha _{1}}{\sin \left(\alpha _{1}+\alpha _{2}\right)}}{\begin{pmatrix}{\vec {c}}_{1}&{\vec {c}}_{2}\end{pmatrix}}{\begin{pmatrix}\cos \alpha _{2}\\\cos \alpha _{1}\end{pmatrix}}} .
Пусть Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \tau'=\frac{\sin \left(\alpha_1+\alpha_2\right)}{\sin \alpha_1}} , и Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c''}_{12}=\tau'\vec{c'}_{12}=\begin{pmatrix}\vec{c}_1 & \vec{c}_2\end{pmatrix} \begin{pmatrix} \cos\alpha_2 \\ \cos\alpha_1 \end{pmatrix}} .
Таким образом, во втором случае Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \vec{c}_{12}=\frac{\tau'\vec{c''}_{12}}{\left|\tau'\vec{c''}_{12}\right|}=\frac{\vec{c''}_{12}}{\left|\vec{c''}_{12}\right|}} , Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \alpha_{12}=\frac{\pi}{2}} .