Распространение радиоволн ВЧ/Реализация/ControlPointSet::EncompassingAperture

Материал из CAMaaS preliminary wiki
< Распространение радиоволн ВЧ‎ | Реализация
Версия от 01:50, 3 декабря 2018; Андрей Чусов (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску
encompassing_aperture_t EncompassingAperture(const spacial_vector<double>& ptAsObservedFrom) const; //1
encompassing_aperture_t EncompassingAperture() const; //2

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

  1. Построение ведется для заданной точки.
  2. То же, но построение ведется для начала мировой системы координат.
Параметры
[in]ptAsObservedFromТочка, вокруг которой строится сфера.
Возвращаемое значение:
Результирующий объект-сектор.
См. также
Source::OptimizeRadiationVectorsСтроит сектор сферы encompassing_aperture_t, область которого ограничивает множество, реализуемое системой классов radiation_set_t, элементов поля, излучаемого источником.
ReflectingObject::EncompassingApertureДля заданной точки строит сектор encompassing_aperture_t сферы с единичным радиусом, описанной вокруг этой точки, так, что отражающий объект ReflectingObject при проекции на сферу будет лежать внутри сектора.

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

Пусть также все точки из лежат по одну сторону от , т.е. не находится геометрически в облаке, образованном . Если это не так, то множество должно быть разбито на подмножества точек, лежащих по одну сторону от , а затем сектора, образованные применением описываемого алгоритма над и подмножествами, должны быть объединены с помощью функции unify.

Фактически, это означает, что все углы, образованные всеми возможными парами отрезков от до должны быть меньше . Это имеет место, когда образовано, например, вершинами одной отражающей поверхности ReflectingObject или контрольными точками одной плоскости вывода результатов PlainControlPointSet. См. также Source::OptimizeRadiationVectors.

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

Если , то . Далее по тексту .

Создадим множество и выберем пару тех точек, отрезки из до которых образуют между собой наибольший угол .

Если угол равен нулю, то .

Поэтому далее по тексту рассматривается оставшийся случай, когда , и .

Тогда задача нахождения будет сводиться к нахождению биссектрисы между и , лежащий на ней вектор единичной длины и угол .

Для нахождения вектора соединим прямой точки и и обозначим как вектор, с которым ассоциирован направленный отрезок, имеющий начало в точке , направленный вдоль биссектриссы между и до точки пересечения с прямой. Обозначим как вектор, с которым ассоциирован направленный отрезок с началом в конце отрезка и концом в точке пересечения. То есть

.

Согласно теореме о биссектрисе эта точка делит отрезок между и в пропорции, равной отношению длин и . Поэтому

;
.

Поэтому

.

Пусть и

.

Тогда и .