From fb7853a5be19bf79776040b70d5889beccfda49e Mon Sep 17 00:00:00 2001 From: Vika Date: Thu, 26 Mar 2026 14:57:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D0=B5=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D1=87=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=82=20=D0=B4=D0=BB=D1=8F=20=D0=AD=D0=9C=D0=A1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс-тг/эмс-тг.gd | 73 +++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index bcd24f6c..23b0dec4 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -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 ## Отображает кластеры на шкале