added all files reserch
This commit is contained in:
61
6.py
Normal file
61
6.py
Normal file
@@ -0,0 +1,61 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user