Доработка. Функция поиска пересечений частот для ЭМС.
This commit is contained in:
@@ -108,6 +108,7 @@ func on_data_received(data: Dictionary, nm: StringName):
|
||||
var indexes: = cnames_table[nm] # Идексы строк в таблице
|
||||
map_yems_data_to_table(unit_data, ctable, indexes)
|
||||
map_yems_data_to_scale(unit_data, claster_scale)
|
||||
#var yems_data_info1 = {}
|
||||
var inters: = find_inters(yems_data_info)
|
||||
map_inters_to_matrix(inters, $'матрица')
|
||||
|
||||
@@ -148,35 +149,59 @@ func map_yems_data_to_table(unit_data: Dictionary, ctable: GDTable, indexes: Dic
|
||||
|
||||
|
||||
func find_inters(info: Dictionary) -> Array:
|
||||
# info - словарь, его структура
|
||||
# {
|
||||
# "устройство": # имя устройства ("эмс-ор63")
|
||||
# [
|
||||
# {
|
||||
# cname, # имя кластера ("Кластер-0")
|
||||
# wfb, # ширина диапазона, МГЦ (800.0)
|
||||
# cfb, # центр диапазона, МГЦ (2000.0)
|
||||
# txe, # передатчик включен
|
||||
# rxe # передатчик выключен
|
||||
# },
|
||||
# {
|
||||
# cname, # имя кластера ("Кластер-1")
|
||||
# wfb, # ширина диапазона, МГЦ (200.0)
|
||||
# cfb, # центр диапазона, МГЦ (1000.0)
|
||||
# txe, # передатчик включен
|
||||
# rxe # передатчик выключен
|
||||
# },
|
||||
# ]
|
||||
# }
|
||||
|
||||
var result = []
|
||||
var all_clusters = []
|
||||
# Собираем все кластеры из всех устройств в один массив
|
||||
for nm in info:
|
||||
# nm - имя устройства
|
||||
var unit_data = info[nm]
|
||||
if not unit_data: continue
|
||||
for cls in unit_data.mcls:
|
||||
# cls - один кластер
|
||||
print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe])
|
||||
# Добавлена проверка для совместимости
|
||||
var clusters = unit_data if unit_data is Array else unit_data.mcls
|
||||
# cls - один кластер
|
||||
for cls in clusters:
|
||||
var cfb = float(cls.cfb)
|
||||
var wfb = float(cls.wfb)
|
||||
# расчёт границ частотных диапазонов
|
||||
var freq_min1 = cfb - wfb / 2.0
|
||||
var freq_max1 = cfb + wfb / 2.0
|
||||
all_clusters.append([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe])
|
||||
print([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe])
|
||||
|
||||
for i in all_clusters.size():
|
||||
var cl1 = all_clusters[i]
|
||||
var dev1 = cl1[0]
|
||||
var name1 = cl1[1]
|
||||
var min1 = cl1[2]
|
||||
var max1 = cl1[3]
|
||||
var txe1 = cl1[4]
|
||||
var rxe1 = cl1[5]
|
||||
|
||||
# Сравниваем текущий кластер со всеми последующими, чтобы избежать дублей и самопересечений
|
||||
for j in range(0, all_clusters.size()):
|
||||
var cl2 = all_clusters[j]
|
||||
var dev2 = cl2[0]
|
||||
var name2 = cl2[1]
|
||||
var min2 = cl2[2]
|
||||
var max2 = cl2[3]
|
||||
var txe2 = cl2[4]
|
||||
var rxe2 = cl2[5]
|
||||
|
||||
#Если нет пары TR(RT) то пропускаем эту комбинацию
|
||||
if not ((txe1 and rxe2) or (rxe1 and txe2)):
|
||||
continue
|
||||
|
||||
# Проверка на пересечение диапазонов, пересечение есть если начало одного диапазона меньше конца другого
|
||||
if max1 > min2 and max2 > min1:
|
||||
#Вычисляем точные границы пересечения
|
||||
var inter_start = max(min1, min2)
|
||||
var inter_end = min(max1, max2)
|
||||
|
||||
# Формируем результат в требуемом формате
|
||||
result.append([dev1, dev2, name1, name2, inter_start, inter_end])
|
||||
# заглушка для возвращаемых данных
|
||||
return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]]
|
||||
return result
|
||||
|
||||
|
||||
## Отображает кластеры на шкале
|
||||
|
||||
Reference in New Issue
Block a user