Шаблон:Распространение радиоволн ВЧ/Реализация/EncompassingAperture/Алгоритм
Пусть - непустое входное множество геометрических точек, и - некоторая заданная точка, вокруг которой требуется построить сектор сферы с единичным радиусом, где - вектор, ассоциированный с направленным отрезком от до центральной точки сектора на поверхности сферы, и - ангулярный радиус сектора, как это реализуется классом encompassing_aperture_t. Проекции всех точек из на сферу должны принадлежать .
Пусть также все точки из лежат по одну сторону от , т.е. не находится геометрически в облаке, образованном . Если это не так, то множество должно быть разбито на подмножества точек, лежащих по одну сторону от , а затем сектора, образованные применением описываемого алгоритма над и подмножествами, должны быть объединены с помощью функции unify.
Фактически, это означает, что все углы, образованные всеми возможными парами отрезков от до должны быть меньше . Это имеет место, когда образовано, например, вершинами одной отражающей поверхности ReflectingObject или контрольными точками одной плоскости вывода результатов PlainControlPointSet. См. также Source::OptimizeRadiationVectors.
Если , то . Далее по тексту .
Создадим множество и выберем пару тех точек, отрезки из до которых образуют между собой наибольший угол .
Если угол равен нулю, то .
Поэтому далее по тексту рассматривается оставшийся случай, когда , и .
Тогда задача нахождения будет сводиться к нахождению биссектрисы между и , лежащий на ней вектор единичной длины и угол .
Для нахождения вектора соединим прямой точки и и обозначим как вектор, с которым ассоциирован направленный отрезок, имеющий начало в точке , направленный вдоль биссектриссы между и до точки пересечения с прямой. Обозначим как вектор, с которым ассоциирован направленный отрезок с началом в конце отрезка и концом в точке пересечения. То есть
- .
Согласно теореме о биссектрисе эта точка делит отрезок между и в пропорции, равной отношению длин и . Поэтому
- ;
- .
Поэтому
- .
Пусть и
- .
Тогда и .