Распространение радиоволн ВЧ/Реализация/radiation set t: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Исправлены ошибки в коде программы и документации)
 
(не показано 5 промежуточных версий этого же участника)
Строка 2: Строка 2:
{{class|Распространение радиоволн ВЧ/Реализация/radiation_set_t}}
{{class|Распространение радиоволн ВЧ/Реализация/radiation_set_t}}


Тип реализует двемерную коллекцию направлений излучения, которая создается для заданного [[Распространение радиоволн ВЧ/Реализация/Source|источника поля]] и зависит от частоты излучения, номера итерации, а также от позиций [[Распространение радиоволн ВЧ/Реализация/ReflectingObject|отражающих поверхностей]] и [[Распространение радиоволн ВЧ/Реализация/ControlPointSet|контрольных точек]] относительно источника.
Тип реализует двумерную коллекцию направлений излучения, которая создается для заданного [[Распространение радиоволн ВЧ/Реализация/Source|источника поля]] и зависит от частоты излучения, номера итерации, а также от позиций [[Распространение радиоволн ВЧ/Реализация/ReflectingObject|отражающих поверхностей]] и [[Распространение радиоволн ВЧ/Реализация/ControlPointSet|контрольных точек]] относительно источника.


[[File:radio_hf_src_angles.svg|thumb|В первом измерении перечисляются углы <math>\varphi</math> (зенита), а во втором - <math>\theta</math> (азимута) относительно некоторого центрального направления <math>\vec{v}</math>. В случае отсутствия оптимизации по локальности отражающих поверхностей и контрольных точек <math>\vec{v}</math> совпадает с главной осью источника. Если же используется оптимизация, вектор <math>\vec{v}</math> совпадает с вектором, возвращаемым методом [[Распространение радиоволн ВЧ/Реализация/encompassing_aperture_t::central_point|encompassing_aperture_t::central_point]] над объектом, в свою очередь возвращенным методом [[Распространение радиоволн ВЧ/Реализация/Source::EncompassingAperture|Source::EncompassingAperture]] источника.]]
[[File:radio_hf_src_angles.svg|thumb|В первом измерении перечисляются углы <math>\varphi</math> (зенита), а во втором - <math>\theta</math> (азимута) относительно некоторого центрального направления <math>\vec{v}</math>. В случае отсутствия оптимизации по локальности отражающих поверхностей и контрольных точек <math>\vec{v}</math> совпадает с главной осью источника. Если же используется оптимизация, вектор <math>\vec{v}</math> совпадает с вектором, возвращаемым методом [[Распространение радиоволн ВЧ/Реализация/encompassing_aperture_t::central_point|encompassing_aperture_t::central_point]] над объектом, в свою очередь возвращенным методом [[Распространение радиоволн ВЧ/Реализация/Source::EncompassingAperture|Source::EncompassingAperture]] источника.|500px]]


Измерения индексируются от нуля. Первое, внешнее, измерение реализуется классами [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_1_collection|dyn_radiation_set_dim_1_collection]] и [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_1_enumerator|dyn_radiation_set_dim_1_enumerator]], первый из которых реализует коллекцию направлений в этом измерении, а второй - перечисление коллекций нулевого измерения, для каждого элемента коллекции в первом измерении.  
[[File:radio_hf_src_angles_diropt.svg|thumb|Минимизация количества элементов коллекции [[Распространение радиоволн ВЧ/Реализация/radiation_set_t|radiation_set_t]] путем локализации контрольных точек и отражающих поверхностей входной модели сектором на сфере, описанной вокруг источника <math>S</math>. Сектор, возвращаемый методом [[Распространение радиоволн ВЧ/Реализация/Source::EncompassingAperture|Source::EncompassingAperture]] источника, представлен центральным направлением <math>\vec{C_p}</math> и ангулярным радиусом <math>\varphi_{\textrm{max}}</math> вокруг этого направления. В процессе перечисления направлений излучения азимут <math>\theta</math> пробегает значения диапазона <math>\left[0, 2\pi\right)</math>, а зенит <math>\varphi</math> - диапазона <math>\left[0, \varphi_{\textrm{max}}\right]\subset\left[0, \pi\right]</math>. Оба угла заданы в базисе <math>\begin{pmatrix}x_L & y_L & z_L\end{pmatrix}</math>, в котором направление <math>\vec{c_p}</math> совпадает с аппликатой, как показано на рисунке.|500px]]
 
Измерения индексируются с нуля. Первое, внешнее, измерение реализуется классами [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_1_collection|dyn_radiation_set_dim_1_collection]] и [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_1_enumerator|dyn_radiation_set_dim_1_enumerator]], первый из которых реализует коллекцию направлений в этом измерении, а второй - перечисление коллекций нулевого измерения для каждого элемента коллекции в первом измерении.  


Нулевое измерение реализуется классами [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_0_collection|dyn_radiation_set_dim_0_collection]] и [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_0_enumerator|dyn_radiation_set_dim_0_enumerator]] соответственно. Элементами коллекции в нулевом измерении являются пары угловых значений "азимут-зенит", реализуемые структурой [[Распространение радиоволн ВЧ/Реализация/angle_pair|angle_pair]].
Нулевое измерение реализуется классами [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_0_collection|dyn_radiation_set_dim_0_collection]] и [[Распространение радиоволн ВЧ/Реализация/dyn_radiation_set_dim_0_enumerator|dyn_radiation_set_dim_0_enumerator]] соответственно. Элементами коллекции в нулевом измерении являются пары угловых значений "азимут-зенит", реализуемые структурой [[Распространение радиоволн ВЧ/Реализация/angle_pair|angle_pair]].


При формировании коллекции направлений излучения используется минимизация элементов коллекции двумя способами. Первый - это зависимость ангулярного шага от значения функции характеристики направленности в текущей ангулярной позиции, как это описано для [[Распространение_радиоволн_ВЧ/Рей-трейсинг#.D0.A3.D0.B3.D0.BB.D0.BE.D0.B2.D0.BE.D0.B9_.D1.88.D0.B0.D0.B3_.D0.B4.D0.B8.D1.81.D0.BA.D1.80.D0.B5.D1.82.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D0.B8_.D0.BA.D0.B0.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_.D0.A5.D0.9D|итерационного рей-трейсинга]]. Второй способ представляет собой ограничение сферы вокруг источника так, чтобы полученный сектор охватывал все отражающие поверхности и контрольные точки входной геометрической модели, и исключение из множества направлений тех из них, которые не принадлежат этому сектору. См. описание класса [[Распространение радиоволн ВЧ/Реализация/encompassing_aperture_t|encompassing_aperture_t]], который описывает такой сектор с помощью вектора направления на центральную точку сектора и ангулярного радиуса вокруг этого вектора.
Реализация перечисленных классов определяет в нулевом измерении перечисление азимутов <math>\theta</math> и в первом измерении - зенитов <math>\varphi</math>.


Пусть <math>\Delta_{0, \textrm{min}}</math> - управляющее значение, возвращенное методом [[Распространение_радиоволн_ВЧ/Config::AngularSamplingRateMin|Config::AngularSamplingRateMin]], <math>\Delta_{0, \textrm{max}}</math> - управляющее значение, возвращенное методом [[Распространение_радиоволн_ВЧ/Config::AngularSamplingRateMax|Config::AngularSamplingRateMin]], <math>R\left(\omega,\theta,\varphi\right)</math> - функция характеристики направленности источника, <math>i\ge 0</math> - номер текущей итерации, <math>\delta\left(S, \theta, \varphi\right)</math> - функция перехода от азимута <math>\theta</math> и зенита <math>\varphi</math>, выраженных относительно вектора <math>\vec{v}</math> источника <math>S</math> (см. рисунок), к азимуту и зениту, выраженным относительно главной оси источника, <math>\begin{pmatrix}\theta_s & \varphi_s \end{pmatrix} = \delta\left(\vec{v}, \theta, \varphi\right)</math>. Тогда ангулярный шаг в нулевом измерении расчитывается как функция
При формировании коллекции направлений излучения производится минимизация числа элементов коллекции двумя способами. Первый - это зависимость ангулярного шага от значения функции характеристики направленности в текущей ангулярной позиции, как это описано для [[Распространение_радиоволн_ВЧ/Рей-трейсинг#.D0.A3.D0.B3.D0.BB.D0.BE.D0.B2.D0.BE.D0.B9_.D1.88.D0.B0.D0.B3_.D0.B4.D0.B8.D1.81.D0.BA.D1.80.D0.B5.D1.82.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D0.B8_.D0.BA.D0.B0.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D1.8F_.D0.A5.D0.9D|итерационного рей-трейсинга]]. Второй способ представляет собой ограничение сферы вокруг источника так, чтобы полученный сектор охватывал все отражающие поверхности и контрольные точки входной геометрической модели, и исключение из множества направлений тех из них, которые не принадлежат этому сектору. См. описание класса [[Распространение радиоволн ВЧ/Реализация/encompassing_aperture_t|encompassing_aperture_t]], который описывает такой сектор с помощью вектора направления на центральную точку сектора и ангулярного радиуса вокруг этого вектора.
:<math>\Delta_\theta\left(\omega,\theta,\varphi\right) = \frac{\Delta_{0, \textrm{min}} + \left(\Delta_{0, \textrm{max}} - \Delta_{0, \textrm{min}}\right)R\left(\omega,\theta_s,\varphi_s\right)}{2^i}</math>.
 
Пусть <math>\Delta_{0, \textrm{min}}</math> - управляющее значение, возвращенное методом [[Распространение_радиоволн_ВЧ/Config::AngularSamplingRateMin|Config::AngularSamplingRateMin]], <math>\Delta_{0, \textrm{max}}</math> - управляющее значение, возвращенное методом [[Распространение_радиоволн_ВЧ/Config::AngularSamplingRateMax|Config::AngularSamplingRateMax]], <math>R\left(\omega,\theta,\varphi\right)</math> - функция характеристики направленности источника, <math>i\ge 0</math> - номер текущей итерации, <math>\delta\left(S, \theta, \varphi\right)</math> - функция перехода от азимута <math>\theta</math> и зенита <math>\varphi</math>, выраженных относительно вектора <math>\vec{c_p}</math> источника <math>S</math> (см. рисунок), к азимуту и зениту, выраженным относительно главной оси источника, <math>\begin{pmatrix}\theta_s & \varphi_s \end{pmatrix} = \delta\left(S, \theta, \varphi\right)</math>. Тогда ангулярный шаг в нулевом измерении расчитывается как функция
:<math>\Delta_\theta\left(\omega,\theta,\varphi\right) = \frac{\Delta_{0, \textrm{min}} + \left(\Delta_{0, \textrm{max}} - \Delta_{0, \textrm{min}}\right)\left(1 - R\left(\omega,\theta_s,\varphi_s\right)\right)}{2^i}</math>.


Зенит перечисляется в первом измерении с шагом <math>\Delta_\varphi\left(\omega,\varphi\right)=\Delta_\theta\left(\omega,0,\varphi\right)</math>.
Зенит перечисляется в первом измерении с шагом <math>\Delta_\varphi\left(\omega,\varphi\right)=\Delta_\theta\left(\omega,0,\varphi\right)</math>.


Функция <math>\delta\left(S, \theta, \varphi\right)</math> преобразования ангулярных координат относительно <math>\vec{v}</math> источника <math>S</math> к базису <math>S</math>реализуется поворотом <math>\vec{v}</math> так, чтобы он совпал с направлением главной оси источника (которая в свою очередь совпадает с аппликатой базиса источника). То есть используется матрица поворота
Функция <math>\delta\left(S, \theta, \varphi\right)</math> преобразования ангулярных координат относительно <math>\vec{c_p}</math> источника <math>S</math> к базису <math>S</math> реализуется поворотом вектора <math>\vec{c_p}</math> так, чтобы он совпал с направлением главной оси источника (которая в свою очередь совпадает с аппликатой базиса источника). То есть используется матрица поворота
:<math>T\left(\vec{v}\right)=\begin{bmatrix}
:<math>T\left(\vec{c_p}\right)=\begin{bmatrix}
\textrm{cos}\varphi_v & 0 & \textrm{sin}\varphi_v \\
\textrm{cos}\varphi_{cp} & 0 & -\textrm{sin}\varphi_{cp} \\
0 & 1 & 0 \\
0 & 1 & 0 \\
-\textrm{sin}\varphi_v & 0 & \textrm{cos}\varphi_v
\textrm{sin}\varphi_{cp} & 0 & \textrm{cos}\varphi_{cp}
\end{bmatrix}\begin{bmatrix}
\end{bmatrix}\begin{bmatrix}
\textrm{cos}\theta_v & -\textrm{sin}\theta_v & 0 \\
\textrm{cos}\theta_{cp} & \textrm{sin}\theta_{cp} & 0 \\
\textrm{sin}\theta_v & \textrm{cos}\theta_v & 0 \\
-\textrm{sin}\theta_{cp} & \textrm{cos}\theta_{cp} & 0 \\
0 & 0 & 1
0 & 0 & 1
\end{bmatrix}=
\begin{bmatrix}
\textrm{cos}\theta_{cp}\textrm{cos}\varphi_{cp} & \textrm{sin}\theta_{cp}\textrm{cos}\varphi_{cp} & -\textrm{sin}\varphi_{cp} \\
-\textrm{sin}\theta_{cp} & \textrm{cos}\theta_{cp} & 0 \\
\textrm{cos}\theta_{cp}\textrm{sin}\varphi_{cp} & \textrm{sin}\theta_{cp}\textrm{sin}\varphi_{cp} & \textrm{cos}\varphi_{cp}
\end{bmatrix}</math>,
\end{bmatrix}</math>,
:в которой пара значений <math>\begin{pmatrix}\theta_v & \varphi_v\end{pmatrix}</math> возвращается вызванным над <math>\vec{v}</math> методом [[Распространение радиоволн ВЧ/Реализация/Antenna::ToSpherical|Antenna::ToSpherical]] антенны источника (см. [[Распространение радиоволн ВЧ/Реализация/Source::Antenna|Source::Antenna]]).
в которой пара значений <math>\begin{pmatrix}\theta_{cp} & \varphi_{cp}\end{pmatrix}</math> возвращается вызванным над <math>\vec{c_p}</math> методом [[Распространение радиоволн ВЧ/Реализация/Antenna::ToSpherical|Antenna::ToSpherical]] антенны источника <math>S</math> (см. [[Распространение радиоволн ВЧ/Реализация/Source::Antenna|Source::Antenna]]).


Тогда направление, заданное углами <math>\left(\theta,\varphi\right)</math> относительно <math>\vec{v}</math>, в базисе источника будет иметь представление
Тогда направление, заданное углами <math>\left(\theta,\varphi\right)</math> относительно <math>\vec{c_p}</math>, в базисе источника будет иметь представление
:<math>P\left(\vec{v}, \theta,\varphi\right)=T\left(\vec{v}\right)\begin{bmatrix}
:<math>P\left(\vec{c_p}, \theta,\varphi\right)=\left(T\left(\vec{c_p}\right)\right)^{-1}\begin{bmatrix}
\textrm{sin}\varphi\textrm{cos}\theta \\
\textrm{sin}\varphi\textrm{sin}\theta \\
\textrm{cos}\varphi
\end{bmatrix} = \left(T\left(\vec{c_p}\right)\right)^T \begin{bmatrix}
\textrm{sin}\varphi\textrm{cos}\theta \\
\textrm{sin}\varphi\textrm{sin}\theta \\
\textrm{cos}\varphi
\end{bmatrix} =
\begin{bmatrix}
\textrm{cos}\theta_{cp}\textrm{cos}\varphi_{cp} & -\textrm{sin}\theta_{cp} & \textrm{cos}\theta_{cp}\textrm{sin}\varphi_{cp} \\
\textrm{sin}\theta_{cp}\textrm{cos}\varphi_{cp} & \textrm{cos}\theta_{cp} & \textrm{sin}\theta_{cp}\textrm{sin}\varphi_{cp} \\
-\textrm{sin}\varphi_{cp} & 0 & \textrm{cos}\varphi_{cp}
\end{bmatrix} \cdot
\begin{bmatrix}
\textrm{sin}\varphi\textrm{cos}\theta \\
\textrm{sin}\varphi\textrm{cos}\theta \\
\textrm{sin}\varphi\textrm{sin}\theta \\
\textrm{sin}\varphi\textrm{sin}\theta \\
Строка 37: Строка 60:


Поэтому результирующая пара углов вычисляется следующим образом
Поэтому результирующая пара углов вычисляется следующим образом
:<math>\begin{pmatrix}\theta & \varphi\end{pmatrix} =  
:<math>\begin{pmatrix}\theta_s & \varphi_s\end{pmatrix} =  
\left[
\left[
\begin{matrix}
\begin{matrix}
\begin{pmatrix}0 & 1\end{pmatrix} \Leftrightarrow P_x^2 + P_y^2 \equiv 0 \\
\begin{pmatrix}0 & 0\end{pmatrix} \Leftrightarrow P_x^2 + P_y^2 \equiv 0 \\
\begin{pmatrix}\textrm{sign}\left(P_y\right)\cdot\textrm{acos}\frac{P_x}{P_x^2+P_y^2} & \textrm{acos}\frac{P_z}{\left|P\right|}\end{pmatrix} \Leftrightarrow P_x^2 + P_y^2 \ne 0 \\
\begin{pmatrix}\textrm{sign}\left(P_y\right)\cdot\textrm{acos}\frac{P_x}{P_x^2+P_y^2} & \textrm{acos}\frac{P_z}{\left|P\right|}\end{pmatrix} \Leftrightarrow P_x^2 + P_y^2 \ne 0 \\
\end{matrix}
\end{matrix}
\right.</math>
\right.</math>
Область определения функции <math>\delta\left(S, \theta, \varphi\right)</math>: <math>\theta\in\left[0, 2\pi\right)</math>, <math>\varphi\in\left[0, \varphi_{\textrm{max}}\right]\subset\left[0, \pi\right]</math>, где <math>\varphi_{\textrm{max}}</math> - максимально возможный зенит - ангулярный радиус, значение которого возвращается методом [[Распространение радиоволн ВЧ/Реализация/encompassing_aperture_t::radius|encompassing_aperture_t::radius]], сектора сферы вокруг источника, так что все отражающие объекты и контрольные точки геометрической модели при отображении на сферу оказываются внутри сектора. При этом вектор <math>\vec{c_p}</math>, возвращаемый методом [[Распространение радиоволн ВЧ/Реализация/encompassing_aperture_t::central_point|encompassing_aperture_t::central_point]], направлен на центр такого сектора.

Текущая версия на 19:37, 8 декабря 2020

Реализует перечисление направлений излучения источником элементов волнового поля при использовании итерационного алгоритма рей-трейсинга.

template <class RadiationPatternType>
using radiation_set_t = dyn_radiation_set_dim_1_collection<RadiationPatternType>;
RadiationPatternTypeТип характеристики направленности, для которой осуществляется перечисление.

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

В первом измерении перечисляются углы (зенита), а во втором - (азимута) относительно некоторого центрального направления . В случае отсутствия оптимизации по локальности отражающих поверхностей и контрольных точек совпадает с главной осью источника. Если же используется оптимизация, вектор совпадает с вектором, возвращаемым методом encompassing_aperture_t::central_point над объектом, в свою очередь возвращенным методом Source::EncompassingAperture источника.
Минимизация количества элементов коллекции radiation_set_t путем локализации контрольных точек и отражающих поверхностей входной модели сектором на сфере, описанной вокруг источника . Сектор, возвращаемый методом Source::EncompassingAperture источника, представлен центральным направлением и ангулярным радиусом вокруг этого направления. В процессе перечисления направлений излучения азимут пробегает значения диапазона , а зенит - диапазона . Оба угла заданы в базисе , в котором направление совпадает с аппликатой, как показано на рисунке.

Измерения индексируются с нуля. Первое, внешнее, измерение реализуется классами dyn_radiation_set_dim_1_collection и dyn_radiation_set_dim_1_enumerator, первый из которых реализует коллекцию направлений в этом измерении, а второй - перечисление коллекций нулевого измерения для каждого элемента коллекции в первом измерении.

Нулевое измерение реализуется классами dyn_radiation_set_dim_0_collection и dyn_radiation_set_dim_0_enumerator соответственно. Элементами коллекции в нулевом измерении являются пары угловых значений "азимут-зенит", реализуемые структурой angle_pair.

Реализация перечисленных классов определяет в нулевом измерении перечисление азимутов и в первом измерении - зенитов .

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

Пусть - управляющее значение, возвращенное методом Config::AngularSamplingRateMin, - управляющее значение, возвращенное методом Config::AngularSamplingRateMax, - функция характеристики направленности источника, - номер текущей итерации, - функция перехода от азимута и зенита , выраженных относительно вектора источника (см. рисунок), к азимуту и зениту, выраженным относительно главной оси источника, . Тогда ангулярный шаг в нулевом измерении расчитывается как функция

.

Зенит перечисляется в первом измерении с шагом .

Функция преобразования ангулярных координат относительно источника к базису реализуется поворотом вектора так, чтобы он совпал с направлением главной оси источника (которая в свою очередь совпадает с аппликатой базиса источника). То есть используется матрица поворота

,

в которой пара значений возвращается вызванным над методом Antenna::ToSpherical антенны источника (см. Source::Antenna).

Тогда направление, заданное углами относительно , в базисе источника будет иметь представление

Поэтому результирующая пара углов вычисляется следующим образом

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