Files
ktn01/6.py
2025-12-03 08:59:14 +03:00

62 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)