Моделирование двух угломерно-дальномерных систем (РЛС)
Данное приложение предназначено для моделирования двух угломерно-дальномерных систем (РЛС), включая:
- Визуализацию диаграмм направленности антенн (ДНА)
- Построение эллипсов и гипербол для учета погрешностей
- Вычисление площадей пересечения областей покрытия
Создаём виртуальное окружение:
python -m venv .venv
.venv\Scripts\activate
Устанавливаем библиотеки:
python -m pip install -r requirements.txt
Запускаем:
python main.py
Площади пересечения областей моделируются с использованием библиотек Shapely
и numpy
. На примере рассмотрим два основных типа областей:
- Диаграммы направленности антенн (ДНА)
- Эллипсы и гиперболы с учетом погрешностей
- Задаются параметры РЛС:
- X, Y – координаты антенны.
- R – радиус действия антенны.
- A – угол направления ДНА.
- W – ширина диаграммы.
- Формируется диапазон углов для построения ДНА:
angles_deg = np.linspace(-360, 360, 3600)
theta = np.deg2rad(angles_deg)
markdown
Копировать код
3. Вычисляется затухание на границах диаграммы:
Формула затухания для построения диаграммы направленности антенны:
[ L(\theta) = e^{-\frac{\ln(2) \cdot (\theta - A)^2}{(W / 2)^2}} ]
Где:
- ( \ln(2) ) – логарифмическое значение для нормализации.
- ( \theta ) – текущий угол в радианах.
- ( A ) – угол направления ДНА.
- ( W ) – ширина диаграммы.
- Построение полигонов ДНА:
Координаты областей рассчитываются на основе углов и радиуса действия антенны:
x_fill = L(angles) * max_range * np.cos(theta) + position_x
y_fill = L(angles) * max_range * np.sin(theta) + position_y
Далее создается полигон с использованием Shapely
:
poly1 = Polygon(np.column_stack((x_fill, y_fill)))
- Эллипсы
Эллипсы строятся на основе суммы радиусов действия двух антенн. Формула для параметра ( c ):
( c = R_1 + R_2 )
Для построения эллипса вызывается функция compute_ellipse
, которая возвращает координаты эллипса:
(x, y) = compute_ellipse(rls1, rls2, c)
- Эллипс 1: строится для идеального случая без учета погрешностей.
- Эллипс 2: строится с учетом погрешностей, добавленных к радиусам ( R_1 ) и ( R_2 ):
( c = (R_1 + E_{\text{ellipse}}) + (R_2 + E_{\text{ellipse}}) )
- Гиперболы
Гипербола моделируется как разность радиусов действия двух антенн. Формула для параметра ( c_h ):
( c_h = R_2 - R_1 )
Для учета погрешностей строятся две дополнительные гиперболы:
- Гипербола с положительной погрешностью: ( c_h + 2 \cdot E_{\text{hyperbola}} )
- Гипербола с отрицательной погрешностью: ( c_h - 2 \cdot E_{\text{hyperbola}} )
Координаты гиперболы вычисляются функцией compute_hyperbola
, которая возвращает две ветви гиперболы:
hyperbola_x1, hyperbola_y1, hyperbola_x2, hyperbola_y2 = compute_hyperbola(rls1, rls2, c_h)
- Гипербола 1: ( R_2 - R_1 = c_h )
- Гипербола 2: ( R_1 - R_2 = c_h )
Полученные гиперболы с учетом погрешностей отображаются на графике.
- Создание полигонов
Все области (диаграммы направленности антенн, эллипсы и гиперболы) конвертируются в объектыPolygon
из библиотекиShapely
.
- Диаграммы направленности антенн (ДНА) формируются на основе вычисленных координат:
poly1 = Polygon(coords_1)
poly2 = Polygon(coords_2)
- Эллипсы и гиперболы также преобразуются в полигональные области.
- Пересечение областей
Для поиска общей области между различными зонами используется метод.intersection
. Этот метод находит геометрическое пересечение между полигонами:
intersection = poly1.intersection(poly2)
Пример:
- Пересечение двух ДНА: ( DНА_1 \cap DНА_2 )
- Пересечение ДНА с эллипсом: ( DНА_1 \cap \text{Эллипс} )
- Общее пересечение всех областей: ( DНА_1 \cap DНА_2 \cap \text{Эллипс} \cap \text{Гипербола} ).
- Вычисление разностей для учета погрешностей
Для учета погрешностей строятся внешние и внутренние границы областей. Метод.difference
позволяет определить разницу между внешней и внутренней границей:
ring = outer_polygon.difference(inner_polygon)
- Например, для эллипса разница между большим эллипсом (с погрешностью) и идеальным эллипсом формирует "кольцо" погрешности.
- Аналогично строятся зоны погрешностей для гипербол.
- Объединение пересечений
Конечная область пересечения формируется путем объединения всех пересечений и учета погрешностей:
final_intersection = poly1.intersection(ellipse_difference).intersection(hyperbola_difference)
В результате получается область, которая учитывает как пересечение зон покрытия, так и погрешности измерений.
-
Проверка и обработка результата
Для проверки пересечений используется метод.is_empty
:- Если пересечение не пустое, вычисляется площадь.
- Если пересечение пустое, площадь равна нулю.
-
Вывод результата
Площадь пересечения вычисляется с помощью метода.area
и выводится на экран:
area = final_intersection.area
Результат отображается в панели управления:
Площадь: X.XX м²
На графике пересекающиеся области отображаются в виде зеленых полигонов для наглядности.
Метод .area
в библиотеке Shapely используется для вычисления площади геометрических объектов, таких как Polygon (многоугольник).
Метод .area
возвращает числовое значение, равное площади двумерного геометрического объекта в его собственной системе координат.
- Площадь вычисляется на основе координат всех вершин многоугольника.
- Метод учитывает как основную границу многоугольника (наружный контур), так и любые внутренние отверстия (вложенные полигоны).
Площадь многоугольника, заданного последовательностью вершин ((x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)), вычисляется по формуле:
[ \text{Area} = \frac{1}{2} \left| \sum_{i=1}^{n-1} (x_i \cdot y_{i+1} - x_{i+1} \cdot y_i) \right| ]
Где:
- ( n ) – количество вершин многоугольника.
- ( (x_i, y_i) ) – координаты ( i )-й вершины.
- Координаты вершин перечисляются по часовой или против часовой стрелке.
Погрешность вычисления площади заданного многоугольника исходит из представления чисел с плавающей запятой в ОЗУ компьютера, а также обеспечивается комплексностью геометрического объекта и многочисленными операциями над полигонами.
Примерная погрешность составляет 0.1 у.е.(^2)