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) # Устанавливаем пределы осей 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): if a == 0 or b == 0 or h == 0: return # Найдите самый большой квадрат, который можно вписать в трапецию largest_square_side = h # Поместите квадрат в трапецию place_square(largest_square_side, 0, 0, ax) # Разделите оставшуюся часть трапеции remaining_a = a - largest_square_side remaining_b = b - largest_square_side # Повторите процесс для новых трапеций if remaining_a > 0: split_trapezoid(remaining_a, b, h, ax) if remaining_b > 0: split_trapezoid(a, remaining_b, h, ax) 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)