Задания
Версия для печати и копирования в MS Word
Тип 27 № 92231
i

Фраг­мент звёзд­но­го неба спро­еци­ро­ван на плос­кость с де­кар­то­вой си­сте­мой ко­ор­ди­нат. Учёный решил про­ве­сти кла­сте­ри­за­цию по­лу­чен­ных точек, яв­ля­ю­щих­ся изоб­ра­же­ни­я­ми звёзд, то есть раз­бить их мно­же­ство на не­пе­ре­се­ка­ю­щих­ся не­пу­стых под­мно­жеств (кла­сте­ров), таких что точки каж­до­го под­мно­же­ства лежат внут­ри пря­мо­уголь­ни­ка со сто­ро­на­ми дли­ной H и W ,причём эти пря­мо­уголь­ни­ки между собой не пе­ре­се­ка­ют­ся. Сто­ро­ны пря­мо­уголь­ни­ков не обя­за­тель­но па­рал­лель­ны ко­ор­ди­нат­ным осям. Га­ран­ти­ру­ет­ся, что такое раз­би­е­ние су­ще­ству­ет и един­ствен­но.

Для каж­дой звез­ды дана ха­рак­те­ри­сти­ка: тип цвета, тип све­ти­мо­сти и её раз­мер в со­от­вет­ствии с таб­ли­цей.

 

Обо­зна­че­ниеЦветОбо­зна­че­ниеРаз­мер
GбелыйIсверх­ги­гант
Jзе­ле­ныйIIяркий ги­гант
LсинийIIIги­гант
Nоран­же­выйIVсуб­ги­гант
Yкрас­ныйVкар­лик
Sго­лу­бойVIсуб­кар­лик
Zжел­тыйVIIква­зар

 

По­лу­чен­ные зна­че­ния за­пи­са­ны в ха­рак­те­ри­сти­ке слит­но: обо­зна­че­ние цвета, све­ти­мость (араб­ская цифра) и обо­зна­че­ние раз­ме­ра.

Будем на­зы­вать цен­тром кла­сте­ра точку этого кла­сте­ра, сумма рас­сто­я­ний от ко­то­рой до всех осталь­ных точек кла­сте­ра ми­ни­маль­на (цен­т­ро­ид).

В файле А хра­нят­ся дан­ные о звёздах двух кла­сте­ров, где H  =  6,5, W  =  4,5 для каж­до­го кла­сте­ра. В каж­дой стро­ке за­пи­са­на ко­ор­ди­на­та x, затем ко­ор­ди­на­та y, а затем её ха­рак­те­ри­сти­ка.

Опре­де­ли­те ко­ор­ди­на­ты цен­тра каж­до­го кла­сте­ра для файла А, затем най­ди­те два числа: Ax  — абс­цис­са бли­жай­ше­го к цен­т­ро­и­ду жел­то­го кар­ли­ка, кла­сте­ра с наи­боль­шим ко­ли­че­ством звёзд, и Ay  — ор­ди­на­та бли­жай­ше­го к цен­т­ро­и­ду жел­то­го кар­ли­ка, кла­сте­ра с наи­боль­шим ко­ли­че­ством звёзд.

Файл A

В от­ве­те ука­жи­те целые части про­из­ве­де­ний A1 × 10 000 и A2 × 10 000.

 

Ответ:

Спрятать решение

Ре­ше­ние.

По­стро­им диа­грам­му для файла А. Для этого от­кро­ем файлы с по­мо­щью python.

Гра­фик для файла А:

 

При­ведём ре­ше­ние для файла А на языке Python.

import tkinter as tk

import math

 

all_stars = []

 

with open('27-4-A.txt') as f:

for line in f:

line = line.replace(',', '.').strip()

parts = line.split()

# Чи­та­ем ко­ор­ди­на­ты и тип

raw_x = float(parts[0])

raw_y = float(parts[1])

info = parts[2]

all_stars.append((raw_x, raw_y, info))

 

#На­хо­дим экс­тре­му­мы для жест­ко­го мас­шта­би­ро­ва­ния

if all_stars:

xs = [s[0] for s in all_stars]

ys = [s[1] for s in all_stars]

min_x, max_x = min(xs), max(xs)

min_y, max_y = min(ys), max(ys)

# За­да­ем фик­си­ро­ван­ный раз­мер окна

W, H = 1000, 700

pad = 50 # От­ступ от краев, чтобы точки не при­ли­па­ли к рамке

# За­щи­та от де­ле­ния на ноль, если все ко­ор­ди­на­ты оди­на­ко­вые

dx = (max_x - min_x) if max_x != min_x else 1

dy = (max_y - min_y) if max_y != min_y else 1

# Рас­счи­ты­ва­ем SCALE

SCALE_X = (W - 2 * pad) / dx

SCALE_Y = (H - 2 * pad) / dy

SCALE = min(SCALE_X, SCALE_Y)

print(f"[+] Гра­ни­цы дан­ных: X от {min_x} до {max_x}, Y от {min_y} до {max_y}")

print(f"[+] Вы­чис­лен­ный мас­штаб от­ри­сов­ки (SCALE): {round(SCALE, 4)}")

else:

min_x, min_y, SCALE, pad, W, H = 0, 0, 1, 50, 1000, 700

 

# Пе­ре­вод в пик­се­ли

def to_px(rx, ry):

px = (rx - min_x) * SCALE + pad

py = H - ((ry - min_y) * SCALE + pad) # Ин­вер­сия Y для нор­маль­ной де­кар­то­вой сетки

return px, py

 

# Клик-об­ра­бот­чик

def click_handler(event):

if not all_stars: return

# Пе­ре­во­дим пик­се­ли клика об­рат­но в ма­те­ма­ти­ку файла

cx = min_x + (event.x - pad) / SCALE

cy = min_y + (H - event.y - pad) / SCALE

closest = None

min_d = float('inf')

for star in all_stars:

rx, ry, info = star

d = math.hypot(cx - rx, cy - ry)

if d < min_d:

min_d = d

closest = star

rx, ry, info = closest

print(f"+ Клик мыш­кой по экра­ну в пик­се­лях: ({event.x}, {event.y})")

print(f"* Бли­жай­шая к клику ре­аль­ная звез­да: X = {rx}, Y = {ry}, Тип = {info}")

print("-" * 50)

 

# 3. Гра­фи­че­ский ин­тер­фейс Tkinter

root = tk.Tk()

root.title("Кли­кер Кла­сте­ров")

canvas = tk.Canvas(root, width=W, height=H, bg='black')

canvas.pack()

 

canvas.bind("<1>", click_handler)

 

# От­ри­сов­ка

for rx, ry, info in all_stars:

px, py = to_px(rx, ry)

color = 0

# Цве­то­вая под­свет­ка

if 'Z' == info[0] and 'V' == info[2:]:

color = 'yellow' # Жел­тый кар­лик

 

# Можно те­гать для удоб­ства уби­рая лиш­ние звёзды

else:

color = '#444444' # Обыч­ные серые фо­но­вые звез­ды

# Ри­су­ем жир­ные, за­мет­ные квад­ра­ты 2х2 пик­се­ля

if color:

canvas.create_rectangle(px-1, py-1, px+1, py+1, fill=color, outline=color)

 

def best_centroid(target_cluster):

best_center = None

min_sum = float('inf')

for cx, cy, _ in target_cluster:

curr_sum = sum(math.hypot(cx - px, cy - py) for px, py, _ in target_cluster)

if curr_sum < min_sum:

min_sum = curr_sum

best_center = (cx, cy)

print(best_center)

 

 

# От­ве­ты A1 и A2

print(int(4.0410983 * 10**4))

print(int(6.2433918 * 10**4))

 

root.mainloop()

Источник: ЕГЭ—2026. Ос­нов­ная волна 18.06.2026. Раз­ные го­ро­да