62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
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)
|