Распространение радиоволн ВЧ/Рей-трейсинг: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 
(не показаны 62 промежуточные версии 2 участников)
Строка 1: Строка 1:
=Модель=
[[Файл:Model RayTrac EM.png|700px|thumb|right|Графическая иллюстрация модели рейтрейсинга]]
=Алгоритм=
=Алгоритм=
==Идея последовательного приближения==
==Идея последовательного приближения==
Строка 15: Строка 17:
Шаги <math>\Delta_{\theta}\left(\theta\right)</math> по азимуту и <math>\Delta_{\varphi}\left(\varphi\right)</math> по зениту источника являются функциями от направления либо постоянными.
Шаги <math>\Delta_{\theta}\left(\theta\right)</math> по азимуту и <math>\Delta_{\varphi}\left(\varphi\right)</math> по зениту источника являются функциями от направления либо постоянными.


[[Файл:Cardioida-ray.jpg|400px|thumb|right|Пример ХН и зависимости углового шага]]
==Угловой шаг дискретизации как функция ХН==
==Угловой шаг дискретизации как функция ХН==
[[Файл:Antenna pattern.png|400px|thumb|right|Диаграмма направленности и испускаемые моделью лучи]]
[[Файл:Antenna pattern (angular step).png|400px|thumb|right|Зависимость углового шага от азимутального угла]]
Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации <math>\Delta_{\theta},~\Delta_{\varphi}</math> как функции от характеристики направленности источника.
Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации <math>\Delta_{\theta},~\Delta_{\varphi}</math> как функции от характеристики направленности источника.


<math>\omega_0 \varphi + k F'(\varphi)</math> , где
Изменение частоты дискретизации <math>\omega(\theta,\varphi, f)</math> происходит по следующему закону:
:<math>\omega_0</math> - начальная частота дискретизации;
 
<math>\omega(\theta,\varphi, f) = \omega_{min} + k F(\theta,\varphi, f)</math> , где
:<math>k = \omega_{max} - \omega_{min}</math> - коэффициент девиации, где
:<math>\omega_{max} = \frac{1}{\arcsin\left(\frac{\lambda}{R_{max}}\right)}\approx\frac{R_{max}}{\lambda}</math> - максимальное и <math>\omega_{min} = \alpha\omega_{max}</math> (для любого <math>0 \leq \alpha \leq 1</math>) минимальное значение частоты дискретизации;
:<math>R_{max}</math> - максимальное расстояние от источника до границ модели;
:<math>F</math> - функция ХН;
:<math>F</math> - функция ХН;
:<math>\varphi</math> - азимутальный угол;
:<math>\theta,~ \varphi</math> - угол места и азимутальный угол;
:<math>k</math> - коэффициент девиации.
:<math>f</math> - частота излучения;
:<math>\lambda</math> - длина излучаемой волны.
 
Тогда шаг дискретизации (угол) будет меняться по следующим образом:
 
<math>\Delta_{\theta},~\Delta_{\varphi} = \frac {1} {\omega(\theta,\varphi)}</math>
 
Общее кол-во лучей определяется выражением:
 
<math>N_{total} = \frac {1} {2 \pi^2} \int \limits_0^{\pi} \int \limits_0^{2 \pi} \omega(\theta,\varphi)~d \theta d \varphi</math>
 
С учетом, что максимум ДН находится в <math>\theta=0,~\varphi=0</math>, получим выражения:
 
<math>N_{\theta~total} = \frac {1} {\pi} \int \limits_0^{\pi} \omega(\theta,\varphi) \bigr|_{\varphi=0}~d \theta</math>,
 
<math>N_{\varphi~total}(\theta) = \frac {1} {2 \pi} \int \limits_0^{2 \pi} \omega(\theta,\varphi)~d \varphi</math>.


==Инициализация геометрической модели==
==Инициализация геометрической модели==
Строка 36: Строка 60:
::<math>\frac{dn}{dh}=grad~n</math> - изменение коэффициента преломления с высотой.
::<math>\frac{dn}{dh}=grad~n</math> - изменение коэффициента преломления с высотой.
:<math>r=\sqrt{x^{2}+y^{2}}</math> - расстояние до точки с высотой <math>h(x,y)</math>.
:<math>r=\sqrt{x^{2}+y^{2}}</math> - расстояние до точки с высотой <math>h(x,y)</math>.


==Основной цикл программы | Вариант 1==
==Основной цикл программы | Вариант 1==
===Предусловия===
===Предусловия===
* <math>G</math> - входное описание среды распространения моделируемого поля, заданное [[Распространение радиоволн ВЧ/Геометрическая модель|геометрической моделью]].
* <math>i</math> - номер итерации моделирования, <math>i\geq 0</math>.
===Основное течение===
===Основное течение===
#<math>S \leftarrow </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G()]].[[Распространение радиоволн ВЧ/Первичный источник|Набор источников()]]</tt>
#<math>S \leftarrow </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество первичных источников()</tt>
#Если <math>S: \varnothing </math>  то ВЫХОД
#Если <math>S \colon ~\varnothing </math>  то ВЫХОД
#<math>\forall ~ s_j \in S</math>
#<math>\forall ~ s_j \in S</math>
##<math>S \leftarrow S~ \backslash \left \{ s_j \right \}</math>
##<math>S \leftarrow S~ \backslash \left \{ s_j \right \}</math>
##<math>\Omega\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
##<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
##<math>\forall ~ \omega_n \in \Omega</math>
###<math>\theta \leftarrow 0</math>
###<math>\forall ~ \zeta_{\theta} : ~~ 0 \leqslant \zeta_{\theta} < \left [ \frac{\pi}{\left \langle \Delta_{\theta} \right \rangle} 2^{i} \right ]</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
####Если <math> \zeta_{\theta} </math> : нечет. & <math>i>0</math>
###Если <math>\theta < \pi \wedge (i=0 \vee \zeta_{\theta} \bmod 2 \neq 0)</math>
#####<math>\alpha_{\theta} \leftarrow \zeta_{\theta} \frac{\Delta_{\theta} (\zeta_{\theta})}{2^i}</math>
####<math>\varphi \leftarrow 0</math>
#####<math>\forall ~ \zeta_{\varphi} : ~~ 0 \leqslant \zeta_{\varphi} < \left [ \frac{2 \pi}{\left \langle \Delta_{\varphi} \right \rangle} 2^{i} \right ]</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
######Если <math> \zeta_{\varphi} </math> : нечет. & <math>i>0</math>
####Если <math>\varphi<2\pi  \wedge (i=0 \vee \zeta_{\varphi} \bmod 2 \neq 0)</math>
#######<math>\alpha_{\varphi} \leftarrow \zeta_{\varphi} \frac{\Delta_{\varphi} (\zeta_{\varphi})}{2^i}</math>
#####Position <math>\leftarrow</math> <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
#######Position <math>\leftarrow</math> <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
#####Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Мировая система координат(Вектор<math>(\theta,~\varphi, 1)</math>))</tt>
#######Ray <math>\leftarrow</math> <tt>  Создать луч(Position, <math>\alpha_{\theta},~\alpha_{\varphi}</math>)</tt>
#####Distance <math>\leftarrow \infty</math>
#######<math>\forall ~ f\in</math> <tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G()]].Множество отражающих объектов()</tt>
#####<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
########<math>\forall ~ t_m \in f</math><tt>.Множество отражающих поверхностей()</tt>
######<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
#########<math>t'\leftarrow t_m:~\min (</math><tt>Расстояние([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), Луч([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(),</tt><math>\alpha_{\theta},\alpha_{\varphi}</math><tt>) </tt><math> \cap ~t_m</math><tt>)</tt><math>)</math>
#######<tt><math>P' \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
#######<math>\forall ~ \rho_k \in P \leftarrow</math> <tt>[[Распространение радиоволн ВЧ/Геометрическая модель|G()]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
#######Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P'</math>)</tt>
########Если <math>\rho_k \in </math> <tt>[[Распространение радиоволн ВЧ/Источник|s()]].Область регистрации луча (<math>\alpha_{\theta},\alpha_{\varphi},\frac{\Delta_{\theta} (\zeta_{\theta})}{2^i},\frac{\Delta_{\varphi} (\zeta_{\varphi})}{2^i},</math> Расстояние([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), Луч([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), <math>\alpha_{\theta},\alpha_{\varphi}</math><math> \cap ~t'</math>))</tt>
########Distance' <math>\leftarrow</math><tt> Расстояние(Position, <math>P'</math>)</tt>
#########<tt><math>\rho</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|s()]].Напряженность(<math>\omega_n,\alpha_{\theta},\alpha_{\varphi}</math>,Расстояние([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), <math>\rho</math>.Позиция()), [[Распространение радиоволн ВЧ/Геометрическая модель|G()]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]))</tt>
########Если Distance' <math><</math> Distance
#######Если <tt>[[Распространение радиоволн ВЧ/Источник|s()]].Напряженность(<math>\omega_n,\alpha_{\theta},\alpha_{\varphi}</math>,Расстояние([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), Луч([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), <math>\alpha_{\theta},\alpha_{\varphi}</math>)  <math> \cap ~t'</math>), [[Распространение радиоволн ВЧ/Геометрическая модель|G()]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]])</tt> <math>>E_{end}</math>
#########Distance <math>\leftarrow</math> Distance'
########<math>s' \leftarrow</math> <tt>[[Распространение радиоволн ВЧ/Вторичный источник при рейтрейсинге|s_II()]].Создать([[Распространение радиоволн ВЧ/Источник|s()]].Напряженность(<math>\omega_n,\alpha_{\theta},\alpha_{\varphi}</math>,Расстояние([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), Луч([[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), <math>\alpha_{\theta},\alpha_{\varphi}</math>)  <math> \cap ~t'</math>), [[Распространение радиоволн ВЧ/Геометрическая модель|G()]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]),  <math>\alpha_{\theta},\alpha_{\varphi}</math>,  [[Распространение радиоволн ВЧ/Источник|s()]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(),  <math>t'</math>)</tt>
#########<math>t' \leftarrow t_{mn}</math>
########<math>S \leftarrow s'</math>
#########<math>P \leftarrow P'</math>
#####<math>\forall ~ \rho_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
######Если <math>\rho_k \in </math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Область регистрации луча <math>(\theta,~\varphi,~\frac{\Delta_{\theta} (\theta)}{2^i},~\frac{\Delta_{\varphi} (\theta, \varphi)}{2^i},</math> Distance<math>)</math></tt>
#######<tt><math>\rho_k</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Расстояние(Position, <math>\rho_k</math>.Позиция()), [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]<math>)</math>)</tt>
#####Если <tt>[[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Distance, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]</tt><math>)>E_{end}</math>
######Angle <tt><math>\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Угол пересечения([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t'</math>]].Плоскость грани())</tt>
######<math>s' \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Вторичный источник при рейтрейсинге|Вторичный источник при рейтрейсинге]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Distance, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]<math>),</math> Angle, <math>P,~t'</math>)</tt>
######<math>S \leftarrow S \cup \{s'\}</math>
####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (\theta, \varphi)}{2^i}</math>
####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
###<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (\theta)}{2^i}</math>
###<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#Переход на шаг 2
#Переход на шаг 2
===Свойства алгоритма===
====Сложность====
====Возможности распараллеливания====


==Основной цикл программы | Вариант 2==
==Основной цикл программы | Вариант 2==
'''Геометрическая модель (рей-трейсинг 2)'''.
''Наследует свойства [[Распространение радиоволн ВЧ/Геометрическая модель|Геометрической модели]].''
* Предикат завершения(). При <math>i = 0</math> возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения <math>\Delta</math> и допустимого процента точек <math>k</math>.
===Предусловия===
* <math>G</math> - входное описание среды распространения моделируемого поля, заданное [[Распространение радиоволн ВЧ/Геометрическая модель|геометрической моделью]].
* <math>\Omega</math> - список частот, на которых необходимо провести моделирование.
* <math>E_{end}</math> - критическое значение напряженности, на котором дальнейшая трассировка луча прекращается.
* <math>\Delta</math> - критерий разности между текущим и предыдущим результатом моделирования, при которой можно считать, что поле промоделированно точно.
===Основное течение===
#<math>\forall ~ \omega_n \in \Omega</math>
##<math>i \leftarrow 0</math>
##Pre_SCP <math> \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]]</tt> ''//Копирование состояния до изменения''.
##Set_event <math>\leftarrow</math><tt> Preprocessing(<math>G,~i,~\omega_n</math>)</tt>
##<math>\forall ~ (s_j,~\theta,~\varphi) \in </math> Set_event
###Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]], <math>\theta,~\varphi,~\omega_n</math>)</tt>
###<tt>Trace(Ray, [[Распространение радиоволн ВЧ/Геометрическая модель|G]], <math>E_{end}</math>)</tt>
##<tt>Postprocessing([[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]])</tt>
##SAcheck <math>\leftarrow</math><tt> SucApprox([[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]], Pre_SCP, <math>\Delta</math>)</tt>
##Если SAcheck
###<math>i \leftarrow i+1</math>
###Переход на 1.2
#ВЫХОД
===<tt>[Таблица событий] <math>\leftarrow</math> Preprocessing(Геометрическая модель, Номер итерации, Частота)</tt>===
Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте.
#<math>T \leftarrow</math> Пустой односвязный список значений <math>(s_j,~\theta,~\varphi)</math>.
#<math>G \leftarrow</math> Геометрическая модель.
#<math>i \leftarrow</math> Номер итерации
#<math>\omega \leftarrow</math> Частота
#<math>\forall ~ s_j \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Первичный источник|Множество первичных источников()]]</tt>
##Если <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика(<math>\omega</math>)]]</tt> <math>\ne 0</math>
###<math>\theta \leftarrow 0</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
###Пока <math>\theta < \pi</math>
####<math>\varphi \leftarrow 0</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
####Пока <math>\varphi<2\pi</math>
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math>
######<math>T</math>.Добавить<math>(s_j,~\theta,~\varphi)</math>
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math>
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math>
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#Вернуть Массив(<math>T</math>)
Если <math>\Delta_{\varphi} (s_j,~\theta,~\varphi) = {\rm const}</math>, и <math>\Delta_{\theta} (s_j,~\theta) = {\rm const}</math>, то есть углы распределены равномерно, таблица может быть реализована в виде массива значений <math>(s_j,~\theta,~\varphi)</math>, элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.
====Параллельная форма====
Параллельное выполнение в общем случае возможно только цикла, перебирающего первичные источники (шаг 4), так как распределение углов заранее не определено.
Пусть <math>P>0</math> - число потоков, выполняющих функцию. Пусть <math>T'</math> -  массив изначально пустых связанных списков троек <math>(s_j,~\theta,~\varphi)</math>, так, что <math>T'_i</math> - <math>i</math>-тый список массива, <math>0\le i<P</math>.
#<math>i \leftarrow</math> Номер итерации
#<math>\omega \leftarrow</math> Частота
#<math>T'\leftarrow</math>Создать массив.
#<math>\forall ~ s_j \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Первичный источник|Множество первичных источников()]]</tt>
##<math>t\leftarrow</math> индекс потока.
##Если <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика(<math>\omega</math>)]]</tt> <math>\ne 0</math>
###<math>\theta \leftarrow 0</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
###Пока <math>\theta < \pi</math>
####<math>\varphi \leftarrow 0</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
####Пока <math>\varphi<2\pi</math>
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math>
######<math>T'_t</math>.Добавить<math>(s_j,~\theta,~\varphi)</math>
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math>
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math>
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#Вернуть Массив<math>\left(\bigsqcup_{t=0}^{P-1}T'_t\right)</math>
===<tt>Trace</tt>===
Функция трассирует луч через геометрическую модель и и фиксирует его прохождение вблизи контрольной точки.
#<math>R\leftarrow \infty</math>
#<math>T\leftarrow </math> NaN
#<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
##<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
###<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость())</tt>
###Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>p</math>)</tt>
####<math>r\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Ray]].Пробег(<math>p</math>)</tt>
####Если <math>r < R</math>
#####<math>R \leftarrow r</math>
#####<math>T \leftarrow t_{mn}</math>
#####<math>P \leftarrow p</math>
#<math>\forall ~ O_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Плоскость вывода результатов|Множество плоскостей вывода результатов()]]</tt>
##<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Плоскость())</tt>
##Если <tt>[[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Принадлежность(<math>p</math>)</tt>
###<math>r\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Ray]].Пробег(<math>p</math>)</tt>
###Если <math>r < R</math>
####<math>\rho \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Ближайшая контрольная точка(<math>p</math>)</tt>
####<tt><math>\rho</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Луч|Ray]], <math>r</math>, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]])</tt>
#Если <math>T \not\equiv</math> NaN
##<tt><math>\gamma \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Угол пересечения([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>T</math>]].Плоскость())</tt>
##<tt>[[Распространение радиоволн ВЧ/Луч|Ray]].Отразить(<math>T,~P,~R,~\gamma</math>,  [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]])</tt>
##Если <tt>[[Распространение радиоволн ВЧ/Луч|Ray]].Напряженность <math> >E_{end} </math></tt>
###<tt>Trace(Ray, [[Распространение радиоволн ВЧ/Геометрическая модель|G]], <math>E_{end}</math>)</tt>
===<tt>Postprocessing</tt>===
Функция "проявляет" поле в контрольных точках по накопленным значениям напряженности от всех пришедших лучей.
===<tt>SucApprox</tt>===
Функция сравнивает текущие результаты моделирования с результатами, полученными на предыдущем шаге. На выходе получаем флаг, по которому решаем, следует ли продолжать уточнять модель.
===Свойства алгоритма===
====Сложность====
====Возможности распараллеливания====
<graphviz size=500px>
digraph ray_tracing_EM_parallel_run{
rankdir=LR;
node[fontsize=14];
edge[fontsize=14];
G0[label="ВХОД"];
G1[label="1"];
G2_1[label="2"];
G3_1[label="3"];
G4_1[label="4"];
G5_1[label="5"];
G2_2[label="2"];
G3_2[label="3"];
G4_2[label="4"];
G5_2[label="5"];
G6_1_1[label="6"];
G6_1_2[label="6"];
G6_2_1[label="6"];
G6_2_2[label="6"];
G7_1_1_1[label="7.1"];
G7_3_1_1[label="7.3"];
G7_4_1_1_1[label="7.4"];
G7_4_1_1_2[label="7.4"];
G7_5_1_1_1_1[label="7.5"];
G7_13_1_1_1_1[label="7.13"];
G7_5_1_1_1_2[label="7.5"];
G7_13_1_1_1_2[label="7.13"];
G7_5_1_1_2_1[label="7.5"];
G7_13_1_1_2_1[label="7.13"];
G7_5_1_1_2_2[label="7.5"];
G7_13_1_1_2_2[label="7.13"];
G7_14_1_1_1[label="7.14"];
G7_14_1_1_2[label="7.14"];
G7_15_1_1[label="7.15"];
G7_16_1_1[label="7.16"];
G7_17_1_1_1[label="7.17"];
G7_24_1_1_1[label="7.24"];
G7_17_1_1_2[label="7.17"];
G7_24_1_1_2[label="7.24"];
G7_25_1_1[label="7.25"];
G7_32_1_1[label="7.32"];
G7_1_1_2[label="7.1"];
G7_3_1_2[label="7.3"];
G7_4_1_2_1[label="7.4"];
G7_4_1_2_2[label="7.4"];
G7_5_1_2_1_1[label="7.5"];
G7_13_1_2_1_1[label="7.13"];
G7_5_1_2_1_2[label="7.5"];
G7_13_1_2_1_2[label="7.13"];
G7_5_1_2_2_1[label="7.5"];
G7_13_1_2_2_1[label="7.13"];
G7_5_1_2_2_2[label="7.5"];
G7_13_1_2_2_2[label="7.13"];
G7_14_1_2_1[label="7.14"];
G7_14_1_2_2[label="7.14"];
G7_15_1_2[label="7.15"];
G7_16_1_2[label="7.16"];
G7_17_1_2_1[label="7.17"];
G7_24_1_2_1[label="7.24"];
G7_17_1_2_2[label="7.17"];
G7_24_1_2_2[label="7.24"];
G7_25_1_2[label="7.25"];
G7_32_1_2[label="7.32"];
G7_1_2_1[label="7.1"];
G7_3_2_1[label="7.3"];
G7_4_2_1_1[label="7.4"];
G7_4_2_1_2[label="7.4"];
G7_5_2_1_1_1[label="7.5"];
G7_13_2_1_1_1[label="7.13"];
G7_5_2_1_1_2[label="7.5"];
G7_13_2_1_1_2[label="7.13"];
G7_5_2_1_2_1[label="7.5"];
G7_13_2_1_2_1[label="7.13"];
G7_5_2_1_2_2[label="7.5"];
G7_13_2_1_2_2[label="7.13"];
G7_14_2_1_1[label="7.14"];
G7_14_2_1_2[label="7.14"];
G7_15_2_1[label="7.15"];
G7_16_2_1[label="7.16"];
G7_17_2_1_1[label="7.17"];
G7_24_2_1_1[label="7.24"];
G7_17_2_1_2[label="7.17"];
G7_24_2_1_2[label="7.24"];
G7_25_2_1[label="7.25"];
G7_32_2_1[label="7.32"];
G7_1_2_2[label="7.1"];
G7_3_2_2[label="7.3"];
G7_4_2_2_1[label="7.4"];
G7_4_2_2_2[label="7.4"];
G7_5_2_2_1_1[label="7.5"];
G7_13_2_2_1_1[label="7.13"];
G7_5_2_2_1_2[label="7.5"];
G7_13_2_2_1_2[label="7.13"];
G7_5_2_2_2_1[label="7.5"];
G7_13_2_2_2_1[label="7.13"];
G7_5_2_2_2_2[label="7.5"];
G7_13_2_2_2_2[label="7.13"];
G7_14_2_2_1[label="7.14"];
G7_14_2_2_2[label="7.14"];
G7_15_2_2[label="7.15"];
G7_16_2_2[label="7.16"];
G7_17_2_2_1[label="7.17"];
G7_24_2_2_1[label="7.24"];
G7_17_2_2_2[label="7.17"];
G7_24_2_2_2[label="7.24"];
G7_25_2_2[label="7.25"];
G7_32_2_2[label="7.32"];
G8_1[label="8"];
G14_1[label="14"];
G8_2[label="8"];
G14_2[label="14"];
G15[label="15"];
SKIP_1[label="...", shape="none"];
SKIP_2[label="...", shape="none"];
SKIP_3[label="...", shape="none"];
SKIP_4[label="...", shape="none"];
SKIP_5[label="...", shape="none"];
SKIP_6[label="...", shape="none"];
SKIP_7[label="...", shape="none"];
SKIP_8[label="...", shape="none"];
SKIP_9[label="...", shape="none"];
SKIP_10[label="...", shape="none"];
//SKIP_11[label="...", shape="none"];
SKIP_12[label="...", shape="none"];
SKIP_13[label="...", shape="none"];
SKIP_14[label="...", shape="none"];
SKIP_15[label="...", shape="none"];
SKIP_16[label="...", shape="none"];
SKIP_17[label="...", shape="none"];
SKIP_18[label="...", shape="none"];
SKIP_19[label="...", shape="none"];
SKIP_20[label="...", shape="none"];
SKIP_21[label="...", shape="none"];
SKIP_22[label="...", shape="none"];
SKIP_23[label="...", shape="none"];
SKIP_24[label="...", shape="none"];
SKIP_25[label="...", shape="none"];
SKIP_26[label="...", shape="none"];
SKIP_27[label="...", shape="none"];
SKIP_28[label="...", shape="none"];
SKIP_29[label="...", shape="none"];
SKIP_30[label="...", shape="none"];
SKIP_31[label="...", shape="none"];
G0->G1->{G2_1, G2_2}
G2_1->G3_1->G4_1->G5_1->{G6_1_1, G6_1_2}
G6_1_1->G7_1_1_1
G6_1_2->G7_1_1_2
{G7_32_1_1, G7_32_1_2}->G8_1->SKIP_30->G14_1
G2_2->G3_2->G4_2->G5_2->{G6_2_1, G6_2_2}
G6_2_1->G7_1_2_1
G6_2_2->G7_1_2_2
{G7_32_2_1, G7_32_2_2}->G8_2->SKIP_31->G14_2
{G14_1, G14_2}->G15->"ВЫХОД"
G7_1_1_1->G7_3_1_1->{G7_4_1_1_1, G7_4_1_1_2}
G7_4_1_1_1->{G7_5_1_1_1_1, G7_5_1_1_1_2}
G7_5_1_1_1_1->SKIP_1->G7_13_1_1_1_1
G7_5_1_1_1_2->SKIP_2->G7_13_1_1_1_2
{G7_13_1_1_1_1, G7_13_1_1_1_2}->G7_14_1_1_1
G7_4_1_1_2->{G7_5_1_1_2_1, G7_5_1_1_2_2}
G7_5_1_1_2_1->SKIP_3->G7_13_1_1_2_1
G7_5_1_1_2_2->SKIP_4->G7_13_1_1_2_2
{G7_13_1_1_2_1, G7_13_1_1_2_2}->G7_14_1_1_2
{G7_14_1_1_1, G7_14_1_1_2}->G7_15_1_1->G7_16_1_1->{G7_17_1_1_1, G7_17_1_1_2}
G7_17_1_1_1->SKIP_5->G7_24_1_1_1
G7_17_1_1_2->SKIP_6->G7_24_1_1_2
{G7_24_1_1_1, G7_24_1_1_2}->G7_25_1_1->SKIP_15->G7_32_1_1
G7_1_1_2->G7_3_1_2->{G7_4_1_2_1, G7_4_1_2_2}
G7_4_1_2_1->{G7_5_1_2_1_1, G7_5_1_2_1_2}
G7_5_1_2_1_1->SKIP_18->G7_13_1_2_1_1
G7_5_1_2_1_2->SKIP_19->G7_13_1_2_1_2
{G7_13_1_2_1_1, G7_13_1_2_1_2}->G7_14_1_2_1
G7_4_1_2_2->{G7_5_1_2_2_1, G7_5_1_2_2_2}
G7_5_1_2_2_1->SKIP_16->G7_13_1_2_2_1
G7_5_1_2_2_2->SKIP_17->G7_13_1_2_2_2
{G7_13_1_2_2_1, G7_13_1_2_2_2}->G7_14_1_2_2
{G7_14_1_2_1, G7_14_1_2_2}->G7_15_1_2->G7_16_1_2->{G7_17_1_2_1, G7_17_1_2_2}
G7_17_1_2_1->SKIP_7->G7_24_1_2_1
G7_17_1_2_2->SKIP_8->G7_24_1_2_2
{G7_24_1_2_1, G7_24_1_2_2}->G7_25_1_2->SKIP_12->G7_32_1_2
G7_1_2_1->G7_3_2_1->{G7_4_2_1_1, G7_4_2_1_2}
G7_4_2_1_1->{G7_5_2_1_1_1, G7_5_2_1_1_2}
G7_5_2_1_1_1->SKIP_20->G7_13_2_1_1_1
G7_5_2_1_1_2->SKIP_21->G7_13_2_1_1_2
{G7_13_2_1_1_1, G7_13_2_1_1_2}->G7_14_2_1_1
G7_4_2_1_2->{G7_5_2_1_2_1, G7_5_2_1_2_2}
G7_5_2_1_2_1->SKIP_22->G7_13_2_1_2_1
G7_5_2_1_2_2->SKIP_23->G7_13_2_1_2_2
{G7_13_2_1_2_1, G7_13_2_1_2_2}->G7_14_2_1_2
{G7_14_2_1_1, G7_14_2_1_2}->G7_15_2_1->G7_16_2_1->{G7_17_2_1_1, G7_17_2_1_2}
G7_17_2_1_1->SKIP_9->G7_24_2_1_1
G7_17_2_1_2->SKIP_10->G7_24_2_1_2
{G7_24_2_1_1, G7_24_2_1_2}->G7_25_2_1->SKIP_13->G7_32_2_1
G7_1_2_2->G7_3_2_2->{G7_4_2_2_1, G7_4_2_2_2}
G7_4_2_2_1->{G7_5_2_2_1_1, G7_5_2_2_1_2}
G7_5_2_2_1_1->SKIP_24->G7_13_2_2_1_1
G7_5_2_2_1_2->SKIP_25->G7_13_2_2_1_2
{G7_13_2_2_1_1, G7_13_2_2_1_2}->G7_14_2_2_1
G7_4_2_2_2->{G7_5_2_2_2_1, G7_5_2_2_2_2}
G7_5_2_2_2_1->SKIP_26->G7_13_2_2_2_1
G7_5_2_2_2_2->SKIP_27->G7_13_2_2_2_2
{G7_13_2_2_2_1, G7_13_2_2_2_2}->G7_14_2_2_2
{G7_14_2_2_1, G7_14_2_2_2}->G7_15_2_2->G7_16_2_2->{G7_17_2_2_1, G7_17_2_2_2}
G7_17_2_2_1->SKIP_28->G7_24_2_2_1
G7_17_2_2_2->SKIP_29->G7_24_2_2_2
{G7_24_2_2_1, G7_24_2_2_2}->G7_25_2_2->SKIP_14->G7_32_2_2
}
</graphviz>

Текущая версия на 07:50, 14 февраля 2018

Модель

Графическая иллюстрация модели рейтрейсинга

Алгоритм

Идея последовательного приближения

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

, где

- параметр моделирования, задаваемый пользователем.

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

, где

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

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

Шаги по азимуту и по зениту источника являются функциями от направления либо постоянными.

Угловой шаг дискретизации как функция ХН

Диаграмма направленности и испускаемые моделью лучи
Зависимость углового шага от азимутального угла

Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации как функции от характеристики направленности источника.

Изменение частоты дискретизации происходит по следующему закону:

, где

- коэффициент девиации, где
- максимальное и (для любого ) минимальное значение частоты дискретизации;
- максимальное расстояние от источника до границ модели;
- функция ХН;
- угол места и азимутальный угол;
- частота излучения;
- длина излучаемой волны.

Тогда шаг дискретизации (угол) будет меняться по следующим образом:

Общее кол-во лучей определяется выражением:

С учетом, что максимум ДН находится в , получим выражения:

Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): N_{\theta~total} = \frac {1} {\pi} \int \limits_0^{\pi} \omega(\theta,\varphi) \bigr|_{\varphi=0}~d \theta ,

.

Инициализация геометрической модели

Перерасчет высот с учетом кривизны земли и рефракции радиоволн в тропосфере.

Входной параметр Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): h пересчитывается в соответствии с формулой:

, где

- эквивалентный радиус Земли, где
Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): R_0=6371 - радиус Земли (км),
- изменение коэффициента преломления с высотой.
Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r=\sqrt{x^{2}+y^{2}} - расстояние до точки с высотой .

Основной цикл программы | Вариант 1

Предусловия

  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): G - входное описание среды распространения моделируемого поля, заданное геометрической моделью.
  • - номер итерации моделирования, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): i\geq 0 .

Основное течение

  1. G.Множество первичных источников()
  2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): S \colon ~\varnothing то ВЫХОД
    1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): S \leftarrow S~ \backslash \left \{ s_j \right \}
    2. .Антенна().Тип антенны().Амплитудно-частотная характеристика()
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta \leftarrow 0
      2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta < \pi \wedge (i=0 \vee \zeta_{\theta} \bmod 2 \neq 0)
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\varphi} \leftarrow 0
        2. Если
          1. Position Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \leftarrow .Антенна().Позиция()
          2. Ray Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \leftarrow Луч().Создать(Position, .Антенна().Мировая система координат(ВекторНевозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): (\theta,~\varphi, 1) ))
          3. Distance
          4. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ f_m\in G.Множество отражающих объектов()
            1. .Множество отражающих поверхностей()
              1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): P' \leftarrow Ray.Пересечение(.Плоскость грани())
              2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): t_{mn} .Принадлежность()
                1. Distance' Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \leftarrow Расстояние(Position, )
                2. Если Distance' Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): < Distance
                  1. Distance Distance'
                  2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): t' \leftarrow t_{mn}
          5. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ \rho_k \in G.Множество контрольных точек()
            1. Если .Область регистрации луча DistanceНевозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): )
              1. .Зарегистрировать(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): s_j .Напряженность, Расстояние(Position, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \rho_k .Позиция()), G.Среда распространения())
          6. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): s_j .Напряженность, Distance, G.Среда распространения()Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): )>E_{end}
            1. Angle Ray.Угол пересечения(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): t' .Плоскость грани())
            2. Вторичный источник при рейтрейсинге.Создать(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): s_j .Напряженность, Distance, G.Среда распространения() Angle, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): P,~t' )
        3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (\theta, \varphi)}{2^i}
      3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta \leftarrow \theta + \frac{\Delta_{\theta} (\theta)}{2^i}
  3. Переход на шаг 2

Свойства алгоритма

Сложность

Возможности распараллеливания

Основной цикл программы | Вариант 2

Геометрическая модель (рей-трейсинг 2). Наследует свойства Геометрической модели.

  • Предикат завершения(). При Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle i = 0} возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения и допустимого процента точек .

Предусловия

  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): G - входное описание среды распространения моделируемого поля, заданное геометрической моделью.
  • - список частот, на которых необходимо провести моделирование.
  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): E_{end} - критическое значение напряженности, на котором дальнейшая трассировка луча прекращается.
  • - критерий разности между текущим и предыдущим результатом моделирования, при которой можно считать, что поле промоделированно точно.

Основное течение

  1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ \omega_n \in \Omega
    1. Pre_SCP Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \leftarrow} G.Множество контрольных точек() //Копирование состояния до изменения.
    2. Set_event Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \leftarrow Preprocessing()
    3. Set_event
      1. Ray Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \leftarrow Луч().Создать(, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \theta,~\varphi,~\omega_n} )
      2. Trace(Ray, G, )
    4. Postprocessing(G.Множество контрольных точек(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega_n ))
    5. SAcheck SucApprox(G.Множество контрольных точек(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega_n ), Pre_SCP, )
    6. Если SAcheck
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): i \leftarrow i+1
      2. Переход на 1.2
  2. ВЫХОД

[Таблица событий] Preprocessing(Геометрическая модель, Номер итерации, Частота)

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

  1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle T\leftarrow } Пустой односвязный список значений Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle (s_{j},~\theta ,~\varphi )} .
  2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle G\leftarrow } Геометрическая модель.
  3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle i \leftarrow} Номер итерации
  4. Частота
  5. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ s_j \in G.Множество первичных источников()
    1. Если .Антенна().Тип антенны().Амплитудно-частотная характеристика(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega ) Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \neq 0}
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta \leftarrow 0
      2. Пока
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \varphi \leftarrow 0
        2. Пока Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \varphi<2\pi
          1. Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle i=0\vee \zeta _{\theta }{\bmod {2}}\neq 0\vee \zeta _{\varphi }{\bmod {2}}\neq 0}
            1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T .ДобавитьНевозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle (s_{j},~\theta ,~\varphi )}
          2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}}
        3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}}
  6. Вернуть Массив()

Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \Delta_{\varphi} (s_j,~\theta,~\varphi) = {\rm const}} , и Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \Delta _{\theta }(s_{j},~\theta )={\rm {const}}} , то есть углы распределены равномерно, таблица может быть реализована в виде массива значений Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle (s_j,~\theta,~\varphi)} , элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.

Параллельная форма

Параллельное выполнение в общем случае возможно только цикла, перебирающего первичные источники (шаг 4), так как распределение углов заранее не определено.

Пусть Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle P>0} - число потоков, выполняющих функцию. Пусть Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle T'} - массив изначально пустых связанных списков троек Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle (s_{j},~\theta ,~\varphi )} , так, что Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle T'_i} - -тый список массива, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle 0\le i<P} .

  1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle i\leftarrow } Номер итерации
  2. Частота
  3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle T'\leftarrow} Создать массив.
  4. G.Множество первичных источников()
    1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle t\leftarrow} индекс потока.
    2. Если .Антенна().Тип антенны().Амплитудно-частотная характеристика(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega ) Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \neq 0}
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta \leftarrow 0
      2. Пока Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta < \pi
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\varphi} \leftarrow 0
        2. Пока Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \varphi<2\pi
          1. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0}
            1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle T'_{t}} .ДобавитьНевозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle (s_j,~\theta,~\varphi)}
          2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \varphi \leftarrow \varphi +{\frac {\Delta _{\varphi }(s_{j},~\theta ,~\varphi )}{2^{i}}}}
          3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\varphi} \leftarrow \zeta_{\varphi}+1
        3. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \theta \leftarrow \theta +{\frac {\Delta _{\theta }(s_{j},~\theta )}{2^{i}}}}
  5. Вернуть МассивНевозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \left(\bigsqcup_{t=0}^{P-1}T'_t\right)}

Trace

Функция трассирует луч через геометрическую модель и и фиксирует его прохождение вблизи контрольной точки.

  1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): R\leftarrow \infty
  2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T\leftarrow NaN
  3. G.Множество отражающих объектов()
    1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ t_{mn} \in f_m .Множество отражающих поверхностей()
      1. Ray.Пересечение(.Плоскость())
      2. Если .Принадлежность(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): p )
        1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): r\leftarrow Ray.Пробег()
        2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r < R
          1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T \leftarrow t_{mn}
          2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): P \leftarrow p
  4. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ O_k \in G.Множество плоскостей вывода результатов()
    1. Ray.Пересечение(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): O_k .Плоскость())
    2. Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): O_k .Принадлежность()
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r\leftarrow Ray.Пробег()
      2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r < R
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): O_k .Ближайшая контрольная точка()
        2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \rho .Зарегистрировать(Ray, , G.Среда распространения())
  5. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T \not\equiv NaN
    1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \gamma \leftarrow Ray.Угол пересечения(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T .Плоскость())
    2. Ray.Отразить(Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): T,~P,~R,~\gamma , G.Среда распространения())
    3. Если Ray.Напряженность Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): >E_{end}
      1. Trace(Ray, G, )

Postprocessing

Функция "проявляет" поле в контрольных точках по накопленным значениям напряженности от всех пришедших лучей.

SucApprox

Функция сравнивает текущие результаты моделирования с результатами, полученными на предыдущем шаге. На выходе получаем флаг, по которому решаем, следует ли продолжать уточнять модель.

Свойства алгоритма

Сложность

Возможности распараллеливания