56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
# Функция для создания координат трапеции
|
|
def trapezoid(a, b, h):
|
|
# Точки четырехугольника трапеции
|
|
x = [-(a/2), -(b/2), b/2, a/2, -(a/2)]
|
|
y = [0, h, h, 0, 0]
|
|
return x, y
|
|
|
|
# Функция для рисования квадратов внутри трапеции
|
|
def draw_squares_in_trapezoid(a, b, h, square_size):
|
|
fig, ax = plt.subplots()
|
|
|
|
# Координаты трапеции
|
|
x_trap, y_trap = trapezoid(a, b, h)
|
|
|
|
# Рисуем трапецию
|
|
ax.plot(x_trap, y_trap, 'b')
|
|
|
|
# Высота и шаги по оси y
|
|
current_y = 0
|
|
while current_y + square_size <= h:
|
|
# Находим ширину трапеции на уровне current_y
|
|
width_at_y = b + (a - b) * (current_y / h)
|
|
|
|
# Количество квадратов в текущем ряду
|
|
num_squares_in_row = int(width_at_y // square_size)
|
|
|
|
# Начальная точка для отрисовки квадратов по оси x
|
|
start_x = -(num_squares_in_row * square_size) / 2
|
|
|
|
# Рисуем квадраты в ряду
|
|
for i in range(num_squares_in_row):
|
|
square = plt.Rectangle((start_x + i * square_size, current_y), square_size, square_size,
|
|
edgecolor='black', facecolor='none')
|
|
ax.add_patch(square)
|
|
|
|
# Переходим на следующий ряд
|
|
current_y += square_size
|
|
|
|
ax.set_aspect('equal')
|
|
plt.xlim(-a / 2 - 1, a / 2 + 1)
|
|
plt.ylim(0, h + 1)
|
|
plt.title("Разбиение трапеции на квадраты")
|
|
plt.grid(True)
|
|
plt.show()
|
|
|
|
# Задаем размеры трапеции и квадрата
|
|
a = 10 # длина большего основания
|
|
b = 6 # длина меньшего основания
|
|
h = 8 # высота
|
|
square_size = 1 # сторона квадрата
|
|
|
|
draw_squares_in_trapezoid(a, b, h, square_size)
|