Распространение радиоволн ВЧ/Метод зеркальных отображений: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 
(не показано 13 промежуточных версий 2 участников)
Строка 1: Строка 1:
=Модель=
=Модель=
[[Файл:Method of image charges.png|700px|thumb|right|Графическая иллюстрация метода изображений]]
[[Файл:Method of image charges.png|700px|thumb|right|Канал Релея]]
[[Файл:Image Source.png|300px|thumb|right|Паттерн мнимых источников]]
Метод изображений (метод зеркальных отображений) широко применяется в электростатике и электродинамике для решения краевых задач. В частности, в приближении геометрической оптики данный метод позволяет построить картину хода лучей при любом числе отражений.
Метод изображений (метод зеркальных отображений) широко применяется в электростатике и электродинамике для решения краевых задач. В частности, в приближении геометрической оптики данный метод позволяет построить картину хода лучей при любом числе отражений.


Строка 8: Строка 9:


=Алгоритм=
=Алгоритм=
==Предикат последнего отражения==
==Инициализация функций==
===Функция трассировки===
<tt>[Источник_2, B]=Tracing(I, Стек_точек, Стек_граней, Источник_1, Частота, G)</tt>
 
#<math>S \leftarrow</math><tt> Источник_1</tt>
#Пока <math>I>0</math>
##<math>\rho \leftarrow</math><tt> Стек_точек</tt>
##<math>t \leftarrow</math><tt> Стек_граней</tt>
##<math>P \leftarrow</math><tt> <math>S</math>.Антенна().Позиция()</tt>
##<math>Ray \leftarrow</math><tt> Луч().Создать(<math>P</math>, Вектор(<math>P</math>, <math>\rho</math>,1))</tt>
##<math>p \leftarrow</math><tt> <math>Ray</math>.Пересечение(<math>t</math>.Плоскость грани())</tt>
##Если  <tt><math>t</math>.Принадлежность(<math>p</math>)  <math>\wedge</math>  Расстояние(<math>P,\rho</math>) <math>></math> Расстояние(<math>P,p</math>)</tt>  <math>\wedge</math>  НЕ <tt>IsShadowed(<math>Ray</math>, <math>p</math>, G)</tt>
###<math>Angle \leftarrow</math><tt> <math>Ray</math>.Угол пересечения(<math>t</math>.Плоскость грани())</tt>
###<math>S \leftarrow</math><tt> Вторичный источник при рейтрейсинге.Создать(<math>S</math>.Напряженность(Частота, <math>p</math>, G.Среда распространения), <math>Angle</math>, <math>p</math>, <math>t</math>)</tt>
##Иначе
###<math>B \leftarrow</math> ЛОЖЬ
###ВЫХОД
##<math>I \leftarrow I-1</math>
#<tt> Источник_2 </tt><math>\leftarrow S</math>
#<math>B \leftarrow</math> ИСТИНА
#ВЫХОД
 
===Рекурсия===
<tt>NewLevel(I, Стек_точек, Стек_граней, Источник_1, Контрольная_точка, Частота, G)</tt>
 
#<tt><math>stack_{\rho} \leftarrow</math> Стек_точек</tt>
#<tt><math>stack_t \leftarrow</math> Стек_граней</tt>
#<tt><math>s \leftarrow</math> Источник_1</tt>
#<tt><math>\omega \leftarrow</math> Частота</tt>
#<tt><math>\Rho \leftarrow</math> Контрольная_точка</tt>
#<math>I \leftarrow I+1</math>
#<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
##<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
###<math>\rho \Leftarrow stack_{\rho}</math>
###<tt><math>\rho \leftarrow</math> [[Распространение радиоволн ВЧ/Точка|<math>\rho</math>]].Построить зеркальное отображение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
###<math>stack_{\rho} \leftarrow \rho</math>
###<math>stack_t \leftarrow t_{mn}</math>
###<tt><math>[S,~B] \leftarrow </math> Tracing(<math>I,~stack_{\rho},~stack_t,~s,~\omega,~</math> [[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
###Если <math>B</math>
####<tt><math>P \leftarrow</math> [[Распространение радиоволн ВЧ/Источник|<math>S</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
####<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Контрольная точка|<math>\Rho</math>]].Позиция()</tt>
####<tt><math>Ray\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(<math>P</math>, Вектор(<math>P</math>, <math>p</math>, 1))</tt>
####Если НЕ <tt>IsShadowed(<math>Ray,p,</math>[[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
#####<tt><math>\Rho</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>S</math>]].Напряженность(<math>\omega,~p</math>, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]))</tt>
###Если НЕ <tt>IsEnd(<math>E,~I~,i</math>)</tt>
####<tt>NewLevel(<math>I,~stack_{\rho},~stack_t,~s,~\Rho,~\omega,~</math> [[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
###<math>\rho \leftarrow stack_{\rho}</math>
###<math>t_{mn} \leftarrow stack_t</math>
#ВЫХОД
 
===Предикат последнего отражения===
<tt>IsEnd(E, I, i)</tt>
 
В связи с тем, что количество элементарных модельных экспериментов, а следовательно и временные издержки алгоритма, зависит от числа отражающих поверхностей <math>T</math> и порядка отражения <math>I</math> как <math>N=T^I</math>, то важно определить максимальный существенный для текущих условий порядок переотражения сигнала. Введем предикат последнего отражения следующим образом:
В связи с тем, что количество элементарных модельных экспериментов, а следовательно и временные издержки алгоритма, зависит от числа отражающих поверхностей <math>T</math> и порядка отражения <math>I</math> как <math>N=T^I</math>, то важно определить максимальный существенный для текущих условий порядок переотражения сигнала. Введем предикат последнего отражения следующим образом:


Строка 21: Строка 74:
::<math>I',I </math> - порядки переотражения, при которых сигнал пришел в контрольную точку
::<math>I',I </math> - порядки переотражения, при которых сигнал пришел в контрольную точку


Таким образом данный предикат имеет следующий вид <math>END(E, I, i) </math>
Таким образом данный предикат имеет следующий вид <tt>IsEnd(E, I, i)</tt><math>=1 \vee 2 \vee 3</math>
==Предикат тени==
===Предикат тени===
<tt>IsShadowed(Луч, P, G)</tt>
<tt>IsShadowed(Луч, Точка, G)</tt>


Данный предикат проверяет наличие препятствия на пути <tt>[[Распространение радиоволн ВЧ/Луч|Луча]]</tt> в некоторую [[Распространение радиоволн ВЧ/Точка|точку]] P путем проверки нахождения отражающих объектов из множества G.Множество отражающих объектов(), где G - геометрическая модель, на отрезке Луч.Позиция() - P, исключая поверхности, на которых лежат P и Луч.Позиция(), если такие отражающие поверхности существуют.
Данный предикат проверяет наличие препятствия на пути <tt>[[Распространение радиоволн ВЧ/Луч|Луча]]</tt> в некоторую [[Распространение радиоволн ВЧ/Точка|точку]] P путем проверки нахождения отражающих объектов из множества G.Множество отражающих объектов(), где G - геометрическая модель, на отрезке Луч.Позиция() - P, исключая поверхности, на которых лежат P и Луч.Позиция(), если такие отражающие поверхности существуют.


#<tt><math>P \leftarrow</math> Точка</tt>
#<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
#<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
##<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
##<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
Строка 36: Строка 90:
==Предусловия==
==Предусловия==
<math>stack_{t}</math> - аналог стековой памяти, хранящей информацию о занесенных в нее отражающих поверхностей
<math>stack_{t}</math> - аналог стековой памяти, хранящей информацию о занесенных в нее отражающих поверхностей
:<math>stack_{t}=\begin{Bmatrix} f&f&\cdots&f \\ t&t&\cdots&t \\ m&m&\cdots&m \\ n&n&\cdots&n \end{Bmatrix}</math>, где
:<math>stack_{t}=\begin{Bmatrix} t&t&\cdots&t \end{Bmatrix}</math>, где
:<math>f,t</math>  хранятся в виде ссылок на соответствующие элементы. {{mark|text=Судя по алгоритму, <math>stack_t</math> - это стек только отражающих поверхностей - там нужны объекты?}}
:<math>t</math>  хранятся в виде ссылок на соответствующие элементы.
<math>stack_{\rho}</math> - аналог стековой памяти, хранящей информацию о занесенных в нее действительных и мнимых <s>контрольных</s> [[Распространение радиоволн ВЧ/Точка|точках]]
<math>stack_{\rho}</math> - аналог стековой памяти, хранящей информацию о занесенных в нее мнимых [[Распространение радиоволн ВЧ/Точка|точках]]
:<math>stack_{\rho}=\begin{Bmatrix} \rho&\rho&\cdots&\rho \end{Bmatrix}</math>, где
:<math>stack_{\rho}=\begin{Bmatrix} \rho&\rho&\cdots&\rho \end{Bmatrix}</math>
:<math>\rho</math>  хранит всю информацию, соответствующую данной сущности


Операции <math>stack \leftarrow x</math> и <math>x \leftarrow stack</math> аналогичны операциям push и pop соответственно
Операции <math>stack \leftarrow x</math> и <math>x \leftarrow stack</math> аналогичны операциям push и pop соответственно. Операция <math>x \Leftarrow stack</math> копирует последний элемент стека в x без извлечения.


<math>stack_t',stack_{\rho}'</math> - локальные переменные, аналогичные <math>stack_t,stack_{\rho}</math>, использующиеся во внутренних подциклах
<math>stack_t',stack_{\rho}'</math> - локальные переменные, аналогичные <math>stack_t,stack_{\rho}</math>, использующиеся во внутренних подциклах
Строка 68: Строка 121:
#####<math>t_{mn} \leftarrow stack_{t}'</math>
#####<math>t_{mn} \leftarrow stack_{t}'</math>
#####Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, Вектор(Position,[[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho'</math>]].Позиция(), 1))</tt>
#####Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, Вектор(Position,[[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho'</math>]].Позиция(), 1))</tt>
#####<math>P\leftarrow</math><tt>[[Распространение радиоволн ВЧ/Точка|Точка]].Создать</tt><math>\left(\infty, \infty, \infty\right)</math>.
#####Если <math>I' > 0</math>
#####Если <math>I' > 0</math>
######<math>t_{mn} \leftarrow stack_{t}'</math> {{mark|text=См. обсуждение к статье.}}
######<tt><math>P\leftarrow</math>[[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
######<tt><math>P\leftarrow</math>[[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
######Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P</math>) <math>\wedge</math> Расстояние(Position,<math>\rho'</math>.Позиция()) <math>></math> Расстояние(Position,<math>P</math>)</tt>
######Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P</math>) <math>\wedge</math> Расстояние(Position,<math>\rho'</math>.Позиция()) <math>></math> Расстояние(Position,<math>P</math>)</tt>
Строка 76: Строка 127:
######Иначе
######Иначе
#######Переход 1.1.8.1.14
#######Переход 1.1.8.1.14
#####<tt>IsShadowed(Ray, P, G)</tt>
#####Иначе
######<math>P\leftarrow</math><tt>[[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho'</math>]].Позиция()</tt>
#####Если <tt>IsShadowed(Ray, P, G)</tt>
######Переход 1.1.8.1.14
######Переход 1.1.8.1.14
#####Если <math>I' > 0</math>
#####Если <math>I' > 0</math>
Строка 84: Строка 137:
######<math>I' \leftarrow I'-1</math>
######<math>I' \leftarrow I'-1</math>
######Переход 1.1.8.5
######Переход 1.1.8.5
#####<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>\rho'</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Расстояние(Position, <math>\rho'</math>.Позиция()), [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]<math>)</math>)</tt>
#####Если <math>E > E_{end}</math> {{mark|text=См. обсуждение к статье.}}  
#####Если <math>E > E_{end}</math> {{mark|text=См. обсуждение к статье.}}  
######<math>I \leftarrow I+1</math>
######<math>I \leftarrow I+1</math>
Строка 90: Строка 143:
######<math>stack_{\rho} \leftarrow \rho'</math>
######<math>stack_{\rho} \leftarrow \rho'</math>
######Переход 1.1.6
######Переход 1.1.6
#####<math>I \leftarrow I-1</math>
###<math>I \leftarrow I-1</math>
#####Если <math>I < 0</math>
###Если <math>I > 0</math>
###### Переход 1.1.9
####<math>t_{m,n} \leftarrow stack_t</math>
#####<math>t_{m,n} \leftarrow stack_t</math>
####<math>\rho' \leftarrow stack_{\rho}</math>
#####<math>\rho' \leftarrow stack_{\rho}</math>
####Переход 1.1.8
###<math>s_j \leftarrow s'</math>
###<math>s_j \leftarrow s'</math>


{{mark|text=Тот же алгоритм в более развернутой форме с наглядным представлением распараллеливаемых ветвей}}
 
#<math>\forall ~ \rho_k \in </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
#<math>\forall ~ \rho_k \in </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
##<tt><math>\forall ~ s_j \in</math> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество первичных источников()</tt>
##<tt><math>\forall ~ s_j \in</math> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество первичных источников()</tt>
###<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
###<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
####<tt><math>Ray\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(), Вектор([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция(),[[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho_k</math>]].Позиция(), 1))</tt>{{mark|text=Излучение прямых лучей непосредственно в контрольные точки}}
####<tt><math>P \leftarrow</math> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
####<tt><math>P \leftarrow</math> [[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho_k</math>]].Позиция()</tt>
####<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho_k</math>]].Позиция()</tt>
####Если <tt><math>\overline{IsShadowed}(Ray,P,</math>[[Распространение радиоволн ВЧ/Геометрическая модель|G]]<math>)</math></tt>
####<tt><math>Ray\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(<math>P</math>, Вектор(<math>P</math>, <math>p</math>, 1))</tt>
#####<tt><math>\rho_k</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность(<math>\omega_n,~P</math>, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]))</tt> {{mark|text=Регистрация прямых лучей}}
####Если НЕ <tt>IsShadowed(<math>Ray,p,</math>[[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
####<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt> {{mark|text=Создание мнимых приемников 1-го порядка}}
#####<tt><math>\rho_k</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность(<math>\omega_n,~p</math>, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]))</tt>
####<math>I \leftarrow 1</math>
####<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
#####<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
#####<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
######<tt><math>\rho' \leftarrow</math> [[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho_k</math>]].Построить зеркальное отображение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
######<tt><math>\rho \leftarrow</math> [[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho_k</math>]].Построить зеркальное отображение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
######<math>stack_{\rho} \leftarrow \rho</math>
######<math>stack_t \leftarrow t_{mn}</math>
######<tt><math>[S,~B] \leftarrow </math> Tracing(<math>I,~stack_{\rho},~stack_t,~s_j,~\omega_n,~</math> [[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
######Если <math>B</math>
#######<tt><math>P \leftarrow</math> [[Распространение радиоволн ВЧ/Источник|<math>S</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
#######<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Контрольная точка|<math>\rho_k</math>]].Позиция()</tt>
#######<tt><math>Ray\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(<math>P</math>, Вектор(<math>P</math>, <math>p</math>, 1))</tt>
#######Если НЕ <tt>IsShadowed(<math>Ray,p,</math>[[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
########<tt><math>\rho_k</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>S</math>]].Напряженность(<math>\omega_n,~p</math>, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]))</tt>
######Если НЕ <tt>IsEnd(<math>E,~I~,i</math>)</tt>
#######<tt>NewLevel(<math>I,~stack_{\rho},~stack_t,~s_j,~\rho_k,~\omega_n,~</math> [[Распространение радиоволн ВЧ/Геометрическая модель|G]])</tt>
######<math>\rho \leftarrow stack_{\rho}</math>
######<math>t_{mn} \leftarrow stack_t</math>
 
====Возможности распараллеливания====
<graphviz size=500px>
digraph image_source_EM_parallel_run{
rankdir=TB;
node[fontsize=14];
edge[fontsize=14];
G0[label="ВХОД"];
G1[label="1"];
 
G2_1[label="2"];
G2_2[label="2"];
 
G3_1_1[label="3"];
G3_1_2[label="3"];
G3_2_1[label="3"];
G3_2_2[label="3"];
 
G4_1_1_1[label="4"];
G4_1_1_2[label="4"];
G4_1_2_1[label="4"];
G4_1_2_2[label="4"];
G4_2_1_1[label="4"];
G4_2_1_2[label="4"];
G4_2_2_1[label="4"];
G4_2_2_2[label="4"];
 
SKIP1_1_1_1[label="...", shape="none"];
SKIP1_1_1_2[label="...", shape="none"];
SKIP1_1_2_1[label="...", shape="none"];
SKIP1_1_2_2[label="...", shape="none"];
SKIP1_2_1_1[label="...", shape="none"];
SKIP1_2_1_2[label="...", shape="none"];
SKIP1_2_2_1[label="...", shape="none"];
SKIP1_2_2_2[label="...", shape="none"];
 
 
G11_1_1_1[label="11"];
G11_1_1_2[label="11"];
G11_1_2_1[label="11"];
G11_1_2_2[label="11"];
G11_2_1_1[label="11"];
G11_2_1_2[label="11"];
G11_2_2_1[label="11"];
G11_2_2_2[label="11"];
 
G12_1_1_1_1[label="12"];
G12_1_1_1_2[label="12"];
G12_1_1_2_1[label="12"];
G12_1_1_2_2[label="12"];
G12_1_2_1_1[label="12"];
G12_1_2_1_2[label="12"];
G12_1_2_2_1[label="12"];
G12_1_2_2_2[label="12"];
G12_2_1_1_1[label="12"];
G12_2_1_1_2[label="12"];
G12_2_1_2_1[label="12"];
G12_2_1_2_2[label="12"];
G12_2_2_1_1[label="12"];
G12_2_2_1_2[label="12"];
G12_2_2_2_1[label="12"];
G12_2_2_2_2[label="12"];
 
G13_1_1_1_1_1[label="13"];
G13_1_1_1_1_2[label="13"];
G13_1_1_1_2_1[label="13"];
G13_1_1_1_2_2[label="13"];
G13_1_1_2_1_1[label="13"];
G13_1_1_2_1_2[label="13"];
G13_1_1_2_2_1[label="13"];
G13_1_1_2_2_2[label="13"];
G13_1_2_1_1_1[label="13"];
G13_1_2_1_1_2[label="13"];
G13_1_2_1_2_1[label="13"];
G13_1_2_1_2_2[label="13"];
G13_1_2_2_1_1[label="13"];
G13_1_2_2_1_2[label="13"];
G13_1_2_2_2_1[label="13"];
G13_1_2_2_2_2[label="13"];
G13_2_1_1_1_1[label="13"];
G13_2_1_1_1_2[label="13"];
G13_2_1_1_2_1[label="13"];
G13_2_1_1_2_2[label="13"];
G13_2_1_2_1_1[label="13"];
G13_2_1_2_1_2[label="13"];
G13_2_1_2_2_1[label="13"];
G13_2_1_2_2_2[label="13"];
G13_2_2_1_1_1[label="13"];
G13_2_2_1_1_2[label="13"];
G13_2_2_1_2_1[label="13"];
G13_2_2_1_2_2[label="13"];
G13_2_2_2_1_1[label="13"];
G13_2_2_2_1_2[label="13"];
G13_2_2_2_2_1[label="13"];
G13_2_2_2_2_2[label="13"];
 
SKIP2_1_1_1_1_1[label="...", shape="none"];
SKIP2_1_1_1_1_2[label="...", shape="none"];
SKIP2_1_1_1_2_1[label="...", shape="none"];
SKIP2_1_1_1_2_2[label="...", shape="none"];
SKIP2_1_1_2_1_1[label="...", shape="none"];
SKIP2_1_1_2_1_2[label="...", shape="none"];
SKIP2_1_1_2_2_1[label="...", shape="none"];
SKIP2_1_1_2_2_2[label="...", shape="none"];
SKIP2_1_2_1_1_1[label="...", shape="none"];
SKIP2_1_2_1_1_2[label="...", shape="none"];
SKIP2_1_2_1_2_1[label="...", shape="none"];
SKIP2_1_2_1_2_2[label="...", shape="none"];
SKIP2_1_2_2_1_1[label="...", shape="none"];
SKIP2_1_2_2_1_2[label="...", shape="none"];
SKIP2_1_2_2_2_1[label="...", shape="none"];
SKIP2_1_2_2_2_2[label="...", shape="none"];
SKIP2_2_1_1_1_1[label="...", shape="none"];
SKIP2_2_1_1_1_2[label="...", shape="none"];
SKIP2_2_1_1_2_1[label="...", shape="none"];
SKIP2_2_1_1_2_2[label="...", shape="none"];
SKIP2_2_1_2_1_1[label="...", shape="none"];
SKIP2_2_1_2_1_2[label="...", shape="none"];
SKIP2_2_1_2_2_1[label="...", shape="none"];
SKIP2_2_1_2_2_2[label="...", shape="none"];
SKIP2_2_2_1_1_1[label="...", shape="none"];
SKIP2_2_2_1_1_2[label="...", shape="none"];
SKIP2_2_2_1_2_1[label="...", shape="none"];
SKIP2_2_2_1_2_2[label="...", shape="none"];
SKIP2_2_2_2_1_1[label="...", shape="none"];
SKIP2_2_2_2_1_2[label="...", shape="none"];
SKIP2_2_2_2_2_1[label="...", shape="none"];
SKIP2_2_2_2_2_2[label="...", shape="none"];
 
G29_1_1_1_1_1[label="29"];
G29_1_1_1_1_2[label="29"];
G29_1_1_1_2_1[label="29"];
G29_1_1_1_2_2[label="29"];
G29_1_1_2_1_1[label="29"];
G29_1_1_2_1_2[label="29"];
G29_1_1_2_2_1[label="29"];
G29_1_1_2_2_2[label="29"];
G29_1_2_1_1_1[label="29"];
G29_1_2_1_1_2[label="29"];
G29_1_2_1_2_1[label="29"];
G29_1_2_1_2_2[label="29"];
G29_1_2_2_1_1[label="29"];
G29_1_2_2_1_2[label="29"];
G29_1_2_2_2_1[label="29"];
G29_1_2_2_2_2[label="29"];
G29_2_1_1_1_1[label="29"];
G29_2_1_1_1_2[label="29"];
G29_2_1_1_2_1[label="29"];
G29_2_1_1_2_2[label="29"];
G29_2_1_2_1_1[label="29"];
G29_2_1_2_1_2[label="29"];
G29_2_1_2_2_1[label="29"];
G29_2_1_2_2_2[label="29"];
G29_2_2_1_1_1[label="29"];
G29_2_2_1_1_2[label="29"];
G29_2_2_1_2_1[label="29"];
G29_2_2_1_2_2[label="29"];
G29_2_2_2_1_1[label="29"];
G29_2_2_2_1_2[label="29"];
G29_2_2_2_2_1[label="29"];
G29_2_2_2_2_2[label="29"];
 
G30_1_1_1_1[label="30"];
G30_1_1_1_2[label="30"];
G30_1_1_2_1[label="30"];
G30_1_1_2_2[label="30"];
G30_1_2_1_1[label="30"];
G30_1_2_1_2[label="30"];
G30_1_2_2_1[label="30"];
G30_1_2_2_2[label="30"];
G30_2_1_1_1[label="30"];
G30_2_1_1_2[label="30"];
G30_2_1_2_1[label="30"];
G30_2_1_2_2[label="30"];
G30_2_2_1_1[label="30"];
G30_2_2_1_2[label="30"];
G30_2_2_2_1[label="30"];
G30_2_2_2_2[label="30"];
 
G31_1_1_1[label="31"];
G31_1_1_2[label="31"];
G31_1_2_1[label="31"];
G31_1_2_2[label="31"];
G31_2_1_1[label="31"];
G31_2_1_2[label="31"];
G31_2_2_1[label="31"];
G31_2_2_2[label="31"];
 
G32_1_1[label="32"];
G32_1_2[label="32"];
G32_2_1[label="32"];
G32_2_2[label="32"];
 
G33_1[label="33"];
G33_2[label="33"];
 
G34[label="34"];
G35[label="ВЫХОД"];
 
G0->G1->{G2_1; G2_2}
 
G2_1->{G3_1_1; G3_1_2}
G2_2->{G3_2_1; G3_2_2}
 
G3_1_1->{G4_1_1_1; G4_1_1_2}
G3_1_2->{G4_1_2_1; G4_1_2_2}
G3_2_1->{G4_2_1_1; G4_2_1_2}
G3_2_2->{G4_2_2_1; G4_2_2_2}
 
G4_1_1_1->SKIP1_1_1_1->G11_1_1_1->{G12_1_1_1_1; G12_1_1_1_2}
G4_1_1_2->SKIP1_1_1_2->G11_1_1_2->{G12_1_1_2_1; G12_1_1_2_2}
G4_1_2_1->SKIP1_1_2_1->G11_1_2_1->{G12_1_2_1_1; G12_1_2_1_2}
G4_1_2_2->SKIP1_1_2_2->G11_1_2_2->{G12_1_2_2_1; G12_1_2_2_2}
G4_2_1_1->SKIP1_2_1_1->G11_2_1_1->{G12_2_1_1_1; G12_2_1_1_2}
G4_2_1_2->SKIP1_2_1_2->G11_2_1_2->{G12_2_1_2_1; G12_2_1_2_2}
G4_2_2_1->SKIP1_2_2_1->G11_2_2_1->{G12_2_2_1_1; G12_2_2_1_2}
G4_2_2_2->SKIP1_2_2_2->G11_2_2_2->{G12_2_2_2_1; G12_2_2_2_2}
 
G12_1_1_1_1->{G13_1_1_1_1_1; G13_1_1_1_1_2}
G12_1_1_1_2->{G13_1_1_1_2_1; G13_1_1_1_2_2}
G12_1_1_2_1->{G13_1_1_2_1_1; G13_1_1_2_1_2}
G12_1_1_2_2->{G13_1_1_2_2_1; G13_1_1_2_2_2}
G12_1_2_1_1->{G13_1_2_1_1_1; G13_1_2_1_1_2}
G12_1_2_1_2->{G13_1_2_1_2_1; G13_1_2_1_2_2}
G12_1_2_2_1->{G13_1_2_2_1_1; G13_1_2_2_1_2}
G12_1_2_2_2->{G13_1_2_2_2_1; G13_1_2_2_2_2}
G12_2_1_1_1->{G13_2_1_1_1_1; G13_2_1_1_1_2}
G12_2_1_1_2->{G13_2_1_1_2_1; G13_2_1_1_2_2}
G12_2_1_2_1->{G13_2_1_2_1_1; G13_2_1_2_1_2}
G12_2_1_2_2->{G13_2_1_2_2_1; G13_2_1_2_2_2}
G12_2_2_1_1->{G13_2_2_1_1_1; G13_2_2_1_1_2}
G12_2_2_1_2->{G13_2_2_1_2_1; G13_2_2_1_2_2}
G12_2_2_2_1->{G13_2_2_2_1_1; G13_2_2_2_1_2}
G12_2_2_2_2->{G13_2_2_2_2_1; G13_2_2_2_2_2}
 
G13_1_1_1_1_1->SKIP2_1_1_1_1_1->G29_1_1_1_1_1
G13_1_1_1_1_2->SKIP2_1_1_1_1_2->G29_1_1_1_1_2
G13_1_1_1_2_1->SKIP2_1_1_1_2_1->G29_1_1_1_2_1
G13_1_1_1_2_2->SKIP2_1_1_1_2_2->G29_1_1_1_2_2
G13_1_1_2_1_1->SKIP2_1_1_2_1_1->G29_1_1_2_1_1
G13_1_1_2_1_2->SKIP2_1_1_2_1_2->G29_1_1_2_1_2
G13_1_1_2_2_1->SKIP2_1_1_2_2_1->G29_1_1_2_2_1
G13_1_1_2_2_2->SKIP2_1_1_2_2_2->G29_1_1_2_2_2
G13_1_2_1_1_1->SKIP2_1_2_1_1_1->G29_1_2_1_1_1
G13_1_2_1_1_2->SKIP2_1_2_1_1_2->G29_1_2_1_1_2
G13_1_2_1_2_1->SKIP2_1_2_1_2_1->G29_1_2_1_2_1
G13_1_2_1_2_2->SKIP2_1_2_1_2_2->G29_1_2_1_2_2
G13_1_2_2_1_1->SKIP2_1_2_2_1_1->G29_1_2_2_1_1
G13_1_2_2_1_2->SKIP2_1_2_2_1_2->G29_1_2_2_1_2
G13_1_2_2_2_1->SKIP2_1_2_2_2_1->G29_1_2_2_2_1
G13_1_2_2_2_2->SKIP2_1_2_2_2_2->G29_1_2_2_2_2
G13_2_1_1_1_1->SKIP2_2_1_1_1_1->G29_2_1_1_1_1
G13_2_1_1_1_2->SKIP2_2_1_1_1_2->G29_2_1_1_1_2
G13_2_1_1_2_1->SKIP2_2_1_1_2_1->G29_2_1_1_2_1
G13_2_1_1_2_2->SKIP2_2_1_1_2_2->G29_2_1_1_2_2
G13_2_1_2_1_1->SKIP2_2_1_2_1_1->G29_2_1_2_1_1
G13_2_1_2_1_2->SKIP2_2_1_2_1_2->G29_2_1_2_1_2
G13_2_1_2_2_1->SKIP2_2_1_2_2_1->G29_2_1_2_2_1
G13_2_1_2_2_2->SKIP2_2_1_2_2_2->G29_2_1_2_2_2
G13_2_2_1_1_1->SKIP2_2_2_1_1_1->G29_2_2_1_1_1
G13_2_2_1_1_2->SKIP2_2_2_1_1_2->G29_2_2_1_1_2
G13_2_2_1_2_1->SKIP2_2_2_1_2_1->G29_2_2_1_2_1
G13_2_2_1_2_2->SKIP2_2_2_1_2_2->G29_2_2_1_2_2
G13_2_2_2_1_1->SKIP2_2_2_2_1_1->G29_2_2_2_1_1
G13_2_2_2_1_2->SKIP2_2_2_2_1_2->G29_2_2_2_1_2
G13_2_2_2_2_1->SKIP2_2_2_2_2_1->G29_2_2_2_2_1
G13_2_2_2_2_2->SKIP2_2_2_2_2_2->G29_2_2_2_2_2
 
{G29_1_1_1_1_1; G29_1_1_1_1_2}->G30_1_1_1_1
{G29_1_1_1_2_1; G29_1_1_1_2_2}->G30_1_1_1_2
{G29_1_1_2_1_1; G29_1_1_2_1_2}->G30_1_1_2_1
{G29_1_1_2_2_1; G29_1_1_2_2_2}->G30_1_1_2_2
{G29_1_2_1_1_1; G29_1_2_1_1_2}->G30_1_2_1_1
{G29_1_2_1_2_1; G29_1_2_1_2_2}->G30_1_2_1_2
{G29_1_2_2_1_1; G29_1_2_2_1_2}->G30_1_2_2_1
{G29_1_2_2_2_1; G29_1_2_2_2_2}->G30_1_2_2_2
{G29_2_1_1_1_1; G29_2_1_1_1_2}->G30_2_1_1_1
{G29_2_1_1_2_1; G29_2_1_1_2_2}->G30_2_1_1_2
{G29_2_1_2_1_1; G29_2_1_2_1_2}->G30_2_1_2_1
{G29_2_1_2_2_1; G29_2_1_2_2_2}->G30_2_1_2_2
{G29_2_2_1_1_1; G29_2_2_1_1_2}->G30_2_2_1_1
{G29_2_2_1_2_1; G29_2_2_1_2_2}->G30_2_2_1_2
{G29_2_2_2_1_1; G29_2_2_2_1_2}->G30_2_2_2_1
{G29_2_2_2_2_1; G29_2_2_2_2_2}->G30_2_2_2_2
 
{G30_1_1_1_1; G30_1_1_1_2}->G31_1_1_1
{G30_1_1_2_1; G30_1_1_2_2}->G31_1_1_2
{G30_1_2_1_1; G30_1_2_1_2}->G31_1_2_1
{G30_1_2_2_1; G30_1_2_2_2}->G31_1_2_2
{G30_2_1_1_1; G30_2_1_1_2}->G31_2_1_1
{G30_2_1_2_1; G30_2_1_2_2}->G31_2_1_2
{G30_2_2_1_1; G30_2_2_1_2}->G31_2_2_1
{G30_2_2_2_1; G30_2_2_2_2}->G31_2_2_2
 
{G31_1_1_1; G31_1_1_2}->G32_1_1
{G31_1_2_1; G31_1_2_2}->G32_1_2
{G31_2_1_1; G31_2_1_2}->G32_2_1
{G31_2_2_1; G31_2_2_2}->G32_2_2
 
{G32_1_1; G32_1_2}->G33_1
{G32_2_1; G32_2_2}->G33_2
 
{G33_1; G33_2}->G34->G35
 
}
</graphviz>

Текущая версия на 02:24, 21 июня 2017

Модель

Канал Релея
Паттерн мнимых источников

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

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

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

Алгоритм

Инициализация функций

Функция трассировки

[Источник_2, B]=Tracing(I, Стек_точек, Стек_граней, Источник_1, Частота, G)

  1. Источник_1
  2. Пока
    1. Стек_точек
    2. Стек_граней
    3. .Антенна().Позиция()
    4. Луч().Создать(, Вектор(, ,1))
    5. .Пересечение(.Плоскость грани())
    6. Если .Принадлежность() Расстояние() Расстояние() НЕ IsShadowed(, , G)
      1. .Угол пересечения(.Плоскость грани())
      2. Вторичный источник при рейтрейсинге.Создать(.Напряженность(Частота, , G.Среда распространения), , , )
    7. Иначе
      1. ЛОЖЬ
      2. ВЫХОД
  3. Источник_2
  4. ИСТИНА
  5. ВЫХОД

Рекурсия

NewLevel(I, Стек_точек, Стек_граней, Источник_1, Контрольная_точка, Частота, G)

  1. Стек_точек
  2. Стек_граней
  3. Источник_1
  4. Частота
  5. Контрольная_точка
  6. G.Множество отражающих объектов()
    1. .Множество отражающих поверхностей()
      1. .Построить зеркальное отображение(.Плоскость грани())
      2. Tracing( G)
      3. Если
        1. .Антенна().Позиция()
        2. .Позиция()
        3. Луч().Создать(, Вектор(, , 1))
        4. Если НЕ IsShadowed(G)
          1. .Зарегистрировать(.Напряженность(, G.Среда распространения()))
      4. Если НЕ IsEnd()
        1. NewLevel( G)
  7. ВЫХОД

Предикат последнего отражения

IsEnd(E, I, i)

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

1. Если , где

- пренебрежимый уровень сигнала
.Напряженность(, .Позиция(), G.Среда распространения())

2. Если , где

- жестко ограниченный пользователем порядок переотражения

3. Если

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

Таким образом данный предикат имеет следующий вид IsEnd(E, I, i)

Предикат тени

IsShadowed(Луч, Точка, G)

Данный предикат проверяет наличие препятствия на пути Луча в некоторую точку P путем проверки нахождения отражающих объектов из множества G.Множество отражающих объектов(), где G - геометрическая модель, на отрезке Луч.Позиция() - P, исключая поверхности, на которых лежат P и Луч.Позиция(), если такие отражающие поверхности существуют.

  1. Точка
  2. G.Множество отражающих объектов()
    1. .Множество отражающих поверхностей()
      1. Луч.Пересечение(.Плоскость грани())
      2. Если .Принадлежность() Расстояние(Луч.Позиция(),) Расстояние( Расстояние(Луч.Позиция(),)
        1. Вернуть ИСТИНА
  3. Вернуть ЛОЖЬ

Предусловия

- аналог стековой памяти, хранящей информацию о занесенных в нее отражающих поверхностей

, где
хранятся в виде ссылок на соответствующие элементы.

- аналог стековой памяти, хранящей информацию о занесенных в нее мнимых точках

Операции и аналогичны операциям push и pop соответственно. Операция копирует последний элемент стека в x без извлечения.

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

Операция копирует переменную в

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

  1. G.Множество контрольных точек()
    1. G.Множество первичных источников()
      1. См. обсуждение к статье.
      2. Переход 1.1.8.1.4
      3. G.Множество отражающих объектов()
        1. .Множество отражающих поверхностей()
          1. .Построить зеркальное отображение(.Плоскость грани())
          2. Position .Антенна().Позиция()
          3. Ray Луч().Создать(Position, Вектор(Position,.Позиция(), 1))
          4. Если
            1. Ray.Пересечение(.Плоскость грани())
            2. Если .Принадлежность() Расстояние(Position,.Позиция()) Расстояние(Position,)
              1. Переход 1.1.8.1.11
            3. Иначе
              1. Переход 1.1.8.1.14
          5. Иначе
            1. .Позиция()
          6. Если IsShadowed(Ray, P, G)
            1. Переход 1.1.8.1.14
          7. Если
            1. Angle Ray.Угол пересечения(.Плоскость грани())
            2. Вторичный источник при рейтрейсинге.Создать(.Напряженность, Расстояние(Position,), G.Среда распространения() Angle, )
            3. Переход 1.1.8.5
          8. .Зарегистрировать(.Напряженность, Расстояние(Position, .Позиция()), G.Среда распространения())
          9. Если См. обсуждение к статье.
            1. Переход 1.1.6
      4. Если
        1. Переход 1.1.8


  1. G.Множество контрольных точек()
    1. G.Множество первичных источников()
      1. .Антенна().Тип антенны().Амплитудно-частотная характеристика()
        1. .Антенна().Позиция()
        2. .Позиция()
        3. Луч().Создать(, Вектор(, , 1))
        4. Если НЕ IsShadowed(G)
          1. .Зарегистрировать(.Напряженность(, G.Среда распространения()))
        5. G.Множество отражающих объектов()
          1. .Множество отражающих поверхностей()
            1. .Построить зеркальное отображение(.Плоскость грани())
            2. Tracing( G)
            3. Если
              1. .Антенна().Позиция()
              2. .Позиция()
              3. Луч().Создать(, Вектор(, , 1))
              4. Если НЕ IsShadowed(G)
                1. .Зарегистрировать(.Напряженность(, G.Среда распространения()))
            4. Если НЕ IsEnd()
              1. NewLevel( G)

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