added all files reserch
This commit is contained in:
75
8.py
Normal file
75
8.py
Normal 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()
|
||||
Reference in New Issue
Block a user