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

65 lines
2.7 KiB
Python

import matplotlib.pyplot as plt
import numpy as np
def draw_trapezoid_and_squares(base1, base2, height, square_size):
"""
Функция для рисования трапеции и её разбиения на квадраты.
:param base1: Длина нижнего основания трапеции
:param base2: Длина верхнего основания трапеции
:param height: Высота трапеции
:param square_size: Размер стороны квадрата
"""
# Определяем координаты вершин трапеции
x1, y1 = 0, 0 # Левая нижняя вершина
x2, y2 = base1, 0 # Правая нижняя вершина
x3, y3 = (base1 - base2) / 2, height # Левая верхняя вершина
x4, y4 = x3 + base2, height # Правая верхняя вершина
# Рисуем трапецию
trapezoid_x = [x1, x2, x4, x3, x1]
trapezoid_y = [y1, y2, y4, y3, y1]
plt.figure(figsize=(8, 6))
plt.plot(trapezoid_x, trapezoid_y, 'b-', label='Трапеция')
# Разбиваем трапецию на квадраты
num_rows = int(height // square_size) # Количество строк квадратов
for row in range(num_rows):
# Вычисляем высоту текущей строки
current_height = (row + 1) * square_size
if current_height > height:
break
# Определяем ширину трапеции на текущей высоте
width_at_height = base1 - (base1 - base2) * (current_height / height)
start_x = (base1 - width_at_height) / 2
end_x = start_x + width_at_height
# Разбиваем строку на квадраты
num_cols = int(width_at_height // square_size)
for col in range(num_cols):
square_x = start_x + col * square_size
square_y = row * square_size
# Рисуем квадрат
square = plt.Rectangle((square_x, square_y), square_size, square_size, fill=False, edgecolor='r', linewidth=1)
plt.gca().add_patch(square)
# Настройки графика
plt.gca().set_aspect('equal', adjustable='box')
plt.title('Разбиение трапеции на квадраты')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.grid(True)
plt.show()
# Пример использования
base1 = 10 # Нижнее основание
base2 = 6 # Верхнее основание
height = 8 # Высота
square_size = 1 # Размер квадрата
draw_trapezoid_and_squares(base1, base2, height, square_size)