added all files reserch

This commit is contained in:
Danamir
2025-12-03 08:59:14 +03:00
parent a592701a3c
commit bdcf20478e
15 changed files with 1051 additions and 0 deletions

75
8.py Normal file
View File

@@ -0,0 +1,75 @@
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.colors as mcolors
# Определяем новые параметры трапеции
height = 200000 # Высота трапеции увеличена до 200000 см
top_width = 8 # Ширина верхней стороны
bottom_width = 12 # Ширина нижней стороны
depth = 8 # Глубина трапеции
# Генерация температуры на каждом уровне z (реверсированная)
def calculate_temperature(z):
# Температура изменяется от 0°C у основания до 100°C на вершине
return 100 * (z / height)
# Сетка для разбиения трапеции на кубы
# Чтобы избежать слишком больших затрат памяти, увеличим шаг кубов до, например, 10000 см.
x_step, y_step, z_step = 1000, 1000, 10000
x_range = np.arange(0, bottom_width, x_step)
y_range = np.arange(0, depth, y_step)
z_range = np.arange(0, height, z_step)
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# Нормализация и палитра цветов
cmap = plt.get_cmap("coolwarm")
norm = mcolors.Normalize(vmin=0, vmax=100)
# Функция для добавления куба к визуализации
def add_cube(ax, x, y, z, temperature):
vertices = [
[x, y, z], [x+x_step, y, z], [x+x_step, y+y_step, z], [x, y+y_step, z], # нижняя грань
[x, y, z+z_step], [x+x_step, y, z+z_step], [x+x_step, y+y_step, z+z_step], [x, y+y_step, z+z_step] # верхняя грань
]
edges = [
[vertices[j] for j in [0, 1, 2, 3]], # нижняя грань
[vertices[j] for j in [4, 5, 6, 7]], # верхняя грань
[vertices[j] for j in [0, 1, 5, 4]], # боковая грань
[vertices[j] for j in [2, 3, 7, 6]], # боковая грань
[vertices[j] for j in [0, 3, 7, 4]], # передняя грань
[vertices[j] for j in [1, 2, 6, 5]] # задняя грань
]
# Определяем цвет в зависимости от температуры
color = cmap(norm(temperature))
ax.add_collection3d(Poly3DCollection(edges, color=color, edgecolor='black', linewidths=0.1, alpha=0.7))
# Заполняем трапецию кубами
for z in z_range:
# Линейная интерполяция для ширины на каждом уровне высоты
width = top_width + (bottom_width - top_width) * (height - z) / height
x_min = (bottom_width - width) / 2
x_max = x_min + width
for x in np.arange(x_min, x_max, x_step):
for y in y_range:
temperature = calculate_temperature(z)
add_cube(ax, x, y, z, temperature)
# Настройки графика
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
ax.set_xlim(0, bottom_width)
ax.set_ylim(0, depth)
ax.set_zlim(0, height)
# Создаём цветовую шкалу
mappable = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
mappable.set_array([])
plt.colorbar(mappable, ax=ax, label="Температура (°C)")
plt.show()