import matplotlib.pyplot as plt
import numpy as np

def draw_trapezoid_with_squares(a, b, h, square_size):
    """
    Рисует трапецию с квадратами внутри.
    
    Параметры:
    a (float): Верхнее основание трапеции.
    b (float): Нижнее основание трапеции.
    h (float): Высота трапеции.
    square_size (float): Сторона квадрата.
    """
    
    # Функция для вычисления ширины трапеции на уровне y
    def width_at_height(y):
        return b - (b - a) * (y / h)
    
    # Параметры для построения графика
    fig, ax = plt.subplots()
    
    # Стартовая высота
    y = 0
    
    # Проходим по каждому уровню, начиная с нижнего
    while y < h:
        # Вычисляем ширину трапеции на текущем уровне
        current_width = width_at_height(y)
        
        # Определяем левый и правый край на уровне
        left_x = -(current_width / 2)
        right_x = current_width / 2
        
        # Заполняем уровень квадратами
        x = left_x
        while x + square_size <= right_x:
            # Рисуем квадрат
            square = plt.Rectangle((x, y), square_size, square_size, edgecolor='black', facecolor='blue', fill=True)
            ax.add_patch(square)
            x += square_size
        
        # Если осталась неполная часть, рисуем неполный квадрат
        if x < right_x:
            square = plt.Rectangle((x, y), right_x - x, square_size, edgecolor='black', facecolor='blue', fill=True)
            ax.add_patch(square)
        
        # Переходим на следующий уровень
        y += square_size
    
    # Рисуем саму трапецию
    trapezoid = np.array([[-b/2, 0], [b/2, 0], [a/2, h], [-a/2, h], [-b/2, 0]])
    ax.plot(trapezoid[:, 0], trapezoid[:, 1], color='black')
    
    # Настройки графика
    ax.set_aspect('equal')
    plt.xlim(-b/2 - 1, b/2 + 1)
    plt.ylim(0, h + square_size)
    plt.show()

# Пример использования
draw_trapezoid_with_squares(a=6, b=10, h=8, square_size=1)
