import matplotlib.pyplot as plt import matplotlib.patches as patches def draw_trapezoid(a, b, h): fig, ax = plt.subplots() # Рисуем трапецию trapezoid = patches.Polygon([(0, 0), (a, 0), (b, h), (0, h)], closed=True, fill=None, edgecolor='r') ax.add_patch(trapezoid) # Разбиваем трапецию на квадраты split_trapezoid(a, b, h, ax, 0, 0) # Устанавливаем пределы осей ax.set_xlim(-1, max(a, b) + 1) ax.set_ylim(-1, h + 1) ax.set_aspect('equal') plt.show() def split_trapezoid(a, b, h, ax, x_offset, y_offset): if a <= 0 or b <= 0 or h <= 0: return # Найдите самый большой квадрат, который можно вписать в трапецию largest_square_side = min(a, b, h) # Поместите квадрат в трапецию place_square(largest_square_side, x_offset, y_offset, ax) # Разделите оставшуюся часть трапеции remaining_a = a - largest_square_side remaining_b = b - largest_square_side remaining_h = h - largest_square_side # Повторите процесс для новых трапеций if remaining_a > 0 and remaining_h > 0: split_trapezoid(remaining_a, b, remaining_h, ax, x_offset + largest_square_side, y_offset) if remaining_b > 0 and remaining_h > 0: split_trapezoid(a, remaining_b, remaining_h, ax, x_offset, y_offset + largest_square_side) def place_square(side, x, y, ax): # Функция для помещения квадрата в трапецию square = patches.Rectangle((x, y), side, side, linewidth=1, edgecolor='b', facecolor='none') ax.add_patch(square) # Пример использования a = 10 # Длина верхнего основания трапеции b = 20 # Длина нижнего основания трапеции h = 5 # Высота трапеции draw_trapezoid(a, b, h)