Шаблон:Распространение радиоволн ВЧ/Реализация/encompassing aperture t::unify/Алгоритм: различия между версиями
м |
|||
Строка 134: | Строка 134: | ||
В '''третьем случае''' предполагается, что <math>\vec{c}_1\nparallel\vec{c}_2</math>, и <math>\vec{c'}_1\nparallel\vec{c'}_2</math>. | В '''третьем случае''' предполагается, что <math>\vec{c}_1\nparallel\vec{c}_2</math>, и <math>\vec{c'}_1\nparallel\vec{c'}_2</math>. | ||
[[Файл:encompassing_aperture_t_unify_extra.svg|thumb| | |||
Объединение секторов, у которых <math>\vec{c}_1\nparallel\vec{c}_2</math>, и <math>\vec{c'}_1\nparallel\vec{c'}_2</math> (''третий случай'').|400px]] | |||
Пусть <math>\delta=\alpha_1+\gamma+\alpha_2</math>. Здесь <math>\delta>0</math> и <math>\delta\ne\pi</math>, поскольку это - ситуации, описанные выше. | |||
Тогда сектор <math>\Omega_{12}</math> может быть задан парой <math>\vec{c}_{12}=\left(-1\right)^s \tau\left(\vec{c'}_1+\vec{c'}_2\right)</math> и <math>\alpha_{12}=\frac{\delta}{2}</math>. <math>\tau</math> - скаляр, нормализующий <math>\vec{c}_{12}</math>. Знак вектора-направления на центральную точку определяется тем, является ли угол <math>\delta</math> выпуклым, т.е. | |||
:<math>s=\left[\begin{matrix} | |||
0\Leftrightarrow\delta<\pi \\ | |||
1\Leftrightarrow\delta>\pi | |||
\end{matrix}\right.</math>. | |||
Тогда для окончательного решения необходимо найти <math>\vec{c'}_1</math> и <math>\vec{c'}_2</math>. Для этого выразим <math>\vec{c'}_1</math> в базисе <math>\vec{c}_1</math> и <math>\vec{c'}_2</math> - в базисе <math>\vec{c}_2</math>. | |||
Рассмотрим вектора <math>\vec{c}_1</math> и <math>\vec{c'}_1</math> и угол <math>\alpha_1</math>. Если <math>\alpha_1\equiv 0</math>, то <math>\vec{c'}_1=\vec{c}_1</math>, поэтому в базисе <math>\left\langle\vec{c}_1,\vec{c}_2\right\rangle</math> он будет равен <math>\begin{pmatrix}1 & 0 & 0\end{pmatrix}^T</math>. | |||
Далее рассмотрим случай, когда <math>\alpha_1\ne 0</math>. Направленные отрезки <math>\vec{c}_1</math>, <math>\vec{c'}_1</math> и <math>\vec{c}_2</math>, с началом в точке пересечения <math>\vec{c'}_1</math> и сферы до точки пересечения с <math>\vec{c}_1</math>, будут образовывать треугольник, стороны которого соотносятся друг с другом как | |||
:<math>\frac{\left|\vec{c'}_{1}\right|}{\sin\gamma}=\frac{1}{\sin\gamma}=\frac{\vec{c'}_{1x}}{\sin\left(\pi-\alpha_1-\gamma\right)}=\frac{\vec{c'}_{1x}}{\sin\left(\alpha_1+\gamma\right)}=\frac{\vec{c'}_{1y}}{\sin\alpha_1}</math>. | |||
Поэтому <math>\vec{c'}_1=\frac{1}{\sin\gamma}\begin{pmatrix}\vec{c}_1 & \vec{c}_2\end{pmatrix}\begin{pmatrix}\sin\left(\alpha_1 + \gamma\right) \\ \sin\alpha_1\end{pmatrix}</math>. Заметим, что поскольку <math>\gamma>0</math> это равенство выполняется также и для случая <math>\alpha_1\equiv 0</math>. | |||
Также отметим, что аналогичные рассуждения справедливы и для <math>\vec{c'}_2</math>. | |||
Далее, пусть <math>\tau'=\frac{1}{\sin\gamma}</math>, и | |||
:<math>\vec{c''}_1=\begin{pmatrix}\vec{c}_1 & \vec{c}_2\end{pmatrix}\begin{pmatrix}\sin\left(\alpha_1 + \gamma\right) \\ \sin\alpha_1\end{pmatrix}</math>, и | |||
:<math>\vec{c''}_2\begin{pmatrix}\vec{c}_1 & \vec{c}_2\end{pmatrix}\begin{pmatrix}\sin\alpha_2 \\ \sin\left(\alpha_2 + \gamma\right)\end{pmatrix}</math>. | |||
Тогда <math>\vec{c'}_1=\tau'\vec{c''}_1</math> и <math>\vec{c'}_2=\tau'\vec{c''}_2</math>, и | |||
:<math>\vec{c}_{12}=\left(-1\right)^s \frac{\tau'\left(\vec{c''}_1+\vec{c''}_2\right)}{\left|\tau'\left(\vec{c''}_1+\vec{c''}_2\right)\right|}=\left(-1\right)^s \frac{\left(\vec{c''}_1+\vec{c''}_2\right)}{\left|\left(\vec{c''}_1+\vec{c''}_2\right)\right|}</math>, и | |||
:<math>\alpha_{12}=\frac{\delta}{2}</math>. |
Текущая версия на 22:10, 1 декабря 2018
Пусть объединяются два сектора сферы, релизуемые классом классом encompassing_aperture_t - и , где - вектор направления на центральную точку -го сектора (возвращаемый методом encompassing_aperture_t::central_point), а - соответствующий ангулярный радиус (возвращаемый методом encompassing_aperture_t::radius). Сектор, у которого ангулярный радиус равен охватывает сферу полностью независимо от вектора .

В результате объединения создается новый сектор
.Вектора
могут быть либо нулевыми либо единичными. Сектор с нулевым вектором направления считается нейтральным по операции объединения, т.е. .Далее рассматривается случай, в котором
.Поскольку направленные отрезки
и исходят из одной точки - центра сферы, оба отрезка принадлежат одной плоскости, причем эта плоскость является диаметральным сечением сферы. Поэтому задача поиска объединяющего сектора, то есть вектора и ангулярного радиуса , становится двумерной.Пусть далее
, где - угол между и .Два особых случая:
- и
- .
Поэтому:
- , иначе
- .
Далее по тексту предполагается, что
. Следовательно .Существует три случая.
Рассмотрим первый случай, когда
(то есть ). Поскольку длины всех векторов равны единице, , а количество плоскостей, которым одновременно могут принадлежать и бесконечно, вследствие чего количество возможных секторов минимальной площади, объединяющих и , также бесконечно и зависит от того на какой из плоскостей будут принадлежать выбранные и ; и этот выбор будет сводится к выбору диаметральной плоскости, проходящей через .Этот выбор можно сделать, если задать произвольный вектор
, перпендикулярный .В описываемой реализации
- .
Тогда на плоскости, которой одновременно принадлежат
, и , будет однозначно определен вектор , отстоящий на одинаковом угловом расстоянии от векторов и и, поэтому, параллельный вектору центральной точки сектора-объединения.Для нахождения вектора
достаточно выразить его в базисе и осуществить переход к мировой системе координат входной модели. Как видно из рисунка, в указанном базисе вектор имеет координаты- ,
причем
.Тогда в мировых координатах
- .
Пусть
и .Тогда
.Отсюда
- ,
а ангулярный радиус будет равен
- .
Во втором случае
, однако (то есть ).Лемма
- .
Действительно, допустим
.Противоречие ограничению, приведенному выше.
Аналогично доказывается ограничение
.Лемма
и не могут быть одновременно равны нулю. Иначе имел бы место случай 1 выше.Следствие
- .
Поскольку один из ангулярных радиусов обязательно ненулевой, примем ограничение (тогда ).
Решение задачи объединения сводится к поиску вектора
, перпендикулярного (и ), лежащего в плоскости и , имеющего острый угол одновременно с и с и нормализованного.Поскольку вектора
и линейно-независимы, их можно использовать в качестве базиса для поиска вектора, сонаправленного с , следующим образом.Опустим перпендикуляр от конца одного из векторов, например
, на вектор , перперндикулярный и образующий острый угол с . Обозначим вектор, связанный с направленным отрезком, который исходит от центра сферы к точке пересечения и проведенного перпендикуляра, как . Такой вектор очевидно будет сонаправлен с , а его длина будет равна- ;
- .
Обозначим как
и соответственно проекции вектора на и а равно координаты вектора в базисе . Из теоремы синусов следует, что- .
Тогда в базисе
вектор будет равен:- .
Пусть
, и .Таким образом, во втором случае
, .В третьем случае предполагается, что
, и .Пусть
. Здесь и , поскольку это - ситуации, описанные выше.Тогда сектор
может быть задан парой и . - скаляр, нормализующий . Знак вектора-направления на центральную точку определяется тем, является ли угол выпуклым, т.е.- .
Тогда для окончательного решения необходимо найти
и . Для этого выразим в базисе и - в базисе .Рассмотрим вектора
и и угол . Если , то , поэтому в базисе он будет равен .Далее рассмотрим случай, когда
. Направленные отрезки , и , с началом в точке пересечения и сферы до точки пересечения с , будут образовывать треугольник, стороны которого соотносятся друг с другом как- .
Поэтому
. Заметим, что поскольку это равенство выполняется также и для случая .Также отметим, что аналогичные рассуждения справедливы и для
.Далее, пусть
, и- , и
- .
Тогда
и , и- , и
- .