Результат GEMINI:
import numpy as np
import IPython.display as display
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time
# Настройки анимации
angle = 0
while True:
fig = plt.figure(figsize=(8, 6), facecolor='black')
ax = fig.add_subplot(111, projection='3d', facecolor='black')
# --- ИЗМЕНЕНИЯ ТУТ ---
# 1. Снижаем количество точек (было 600, стало 9000000)
num_points = 9000000
r = np.random.uniform(1.5, 5.0, num_points)
theta = np.random.uniform(0, 2 * np.pi, num_points)
# Слегка увеличиваем разброс по вертикали (0.15 вместо 0.1)
# Это сделает диск менее "сбитым"
z = np.random.normal(0, 0.15, num_points) * (r**0.5)
x = r * np.cos(theta)
y = r * np.sin(theta)
colors = plt.cm.YlOrRd(1 - (r - 1.5) / 3.5)
# 2. Уменьшаем размер точек (s=1) и прозрачность (alpha=0.4)
ax.scatter(x, y, z, c=colors, s=1, alpha=0.4)
# ----------------------
# Создаем сферу (событийный горизонт)
# Уменьшаем плотность сетки самой сферы для симметрии (было 30, ставим 15)
u = np.linspace(0, 2 * np.pi, 15)
v = np.linspace(0, np.pi, 15)
xs = 1.0 * np.outer(np.cos(u), np.sin(v))
ys = 1.0 * np.outer(np.sin(u), np.sin(v))
zs = 1.0 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(xs, ys, zs, color='black', antialiased=False)
# Настройка осей
ax.set_xlim([-5, 5])
ax.set_ylim([-5, 5])
ax.set_zlim([-5, 5])
ax.axis('off') # Убираем сетку для чистоты картинки
# Вращение
ax.view_init(elev=20, azim=angle)
angle += 5
display.clear_output(wait=True)
display.display(plt.gcf())
plt.close()
time.sleep(0.00000000001)
Графики COLAB GOOGLE:
import numpy as np
import IPython.display as display
from matplotlib import pyplot as plt
import io
import base64
import time
# Запускаем вечный цикл
while True:
try:
# 1. Генерируем новые случайные данные
ys = 200 + np.random.randn(100)
x = [x for x in range(len(ys))]
# 2. Создаем фигуру
fig = plt.figure(figsize=(4, 3), facecolor='w')
plt.plot(x, ys, '-')
plt.fill_between(x, ys, 195, where=(ys > 195), facecolor='g', alpha=0.6)
plt.title("Live Visualization", fontsize=10)
# 3. Сохраняем график в memory buffer
data = io.BytesIO()
plt.savefig(data, format='png')
image = f"data:image/png;base64,{base64.b64encode(data.getvalue()).decode()}"
alt = "Sample Visualization"
# 4. Очищаем предыдущий вывод и отображаем новый график
display.clear_output(wait=True)
display.display(display.Markdown(f""))
# 5. Закрываем фигуру и делаем паузу
plt.close(fig)
time.sleep(0.0000000000001) # Увеличил паузу для стабильности отображения
except KeyboardInterrupt:
print("\nВизуализация остановлена пользователем.")
break
except Exception as e:
# Если произошла любая другая ошибка (RuntimeError, ValueError и т.д.)
print(f"Произошла ошибка: {e}. Перезапуск через 2 секунды...")
plt.close('all') # На всякий случай закрываем все открытые фигуры
time.sleep(0)
continue
Скопируйте себе на диск для тестов:
5 минут выдержки:
8 часов выдержки:
ИСХОДНЫЕ НАСТРОЙКИ:
import numpy as np
import IPython.display as display
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time
import random
# --- 1. ПОДГОТОВКА (Вне цикла, чтобы не тормозило) ---
num_points = 9000000
r = np.random.uniform(1.5, 5.0, num_points)
theta = np.random.uniform(0, 2 * np.pi, num_points)
z = np.random.normal(0, 0.12, num_points) * (r**0.5)
x = r * np.cos(theta)
y = r * np.sin(theta)
colors = plt.cm.YlOrRd(1 - (r - 1.5) / 3.5)
# Сфера (горизонт событий)
u_s = np.linspace(0, 2 * np.pi, 15)
v_s = np.linspace(0, np.pi, 15)
xs = 1.1 * np.outer(np.cos(u_s), np.sin(v_s))
ys = 1.1 * np.outer(np.sin(u_s), np.sin(v_s))
zs = 1.1 * np.outer(np.ones(np.size(u_s)), np.cos(v_s))
# --- 2. АНИМАЦИЯ ---
angle = 0
try:
while angle <= 360:
# Создаем фигуру
fig = plt.figure(figsize=(10, 7), facecolor='black')
ax = fig.add_subplot(111, projection='3d', facecolor='black')
# Рандомный параметр elev от 0 до 1000
random_elev = random.uniform(0, 18000)
# Рисуем объекты
ax.scatter(x, y, z, c=colors, s=0.7, alpha=0.3, edgecolors='none')
ax.plot_surface(xs, ys, zs, color='black')
# Ограничения и оси
ax.set_xlim([-5, 5])
ax.set_ylim([-5, 5])
ax.set_zlim([-5, 5])
ax.axis('off')
# Применяем вращение (azim) и рандомный наклон (elev)
ax.view_init(elev=random_elev, azim=angle)
# Вывод кадра
display.clear_output(wait=True)
display.display(plt.gcf())
plt.close(fig) # Важно: закрываем фигуру, чтобы не было утечки памяти
angle += 1
time.sleep(0.00000000001)
except Exception as e:
print(f"Произошла ошибка: {e}")
import numpy as np
import IPython.display as display
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time
import random
# --- 1. ПОДГОТОВКА (Вне цикла, чтобы не тормозило) ---
num_points = random.uniform(8800000, 9000000)
int_num_points = int(num_points)
r = np.random.uniform(1.5, 5.0, int_num_points)
theta = np.random.uniform(0, 2 * np.pi, int_num_points)
z = np.random.normal(0, 0.12, int_num_points) * (r**0.5)
x = r * np.cos(theta)
y = r * np.sin(theta)
colors = plt.cm.YlOrRd(1 - (r - 1.5) / 3.5)
# Сфера (горизонт событий)
u_s = np.linspace(0, 2 * np.pi, 15)
v_s = np.linspace(0, np.pi, 15)
xs = 1.1 * np.outer(np.cos(u_s), np.sin(v_s))
ys = 1.1 * np.outer(np.sin(u_s), np.sin(v_s))
zs = 1.1 * np.outer(np.ones(np.size(u_s)), np.cos(v_s))
# --- 2. АНИМАЦИЯ ---
#angle = 0
random_angle = random.uniform(0, 360)
try:
while random_angle <= 360:
num_points = random.uniform(8800000, 9000000)
int_num_points = int(num_points)
r = np.random.uniform(1.5, 5.0, int_num_points)
theta = np.random.uniform(0, 2 * np.pi, int_num_points)
z = np.random.normal(0, 0.12, int_num_points) * (r**0.5)
x = r * np.cos(theta)
y = r * np.sin(theta)
colors = plt.cm.YlOrRd(1 - (r - 1.5) / 3.5)
# Сфера (горизонт событий)
u_s = np.linspace(0, 2 * np.pi, 15)
v_s = np.linspace(0, np.pi, 15)
xs = 1.1 * np.outer(np.cos(u_s), np.sin(v_s))
ys = 1.1 * np.outer(np.sin(u_s), np.sin(v_s))
zs = 1.1 * np.outer(np.ones(np.size(u_s)), np.cos(v_s))
# Создаем фигуру
fig = plt.figure(figsize=(10, 7), facecolor='black')
ax = fig.add_subplot(111, projection='3d', facecolor='black')
# Рандомный параметр elev от 0 до 1000
random_elev = random.uniform(0, 24000)
# Рисуем объекты
ax.scatter(x, y, z, c=colors, s=0.7, alpha=0.3, edgecolors='none')
ax.plot_surface(xs, ys, zs, color='black')
# Ограничения и оси
ax.set_xlim([-5, 5])
ax.set_ylim([-5, 5])
ax.set_zlim([-5, 5])
ax.axis('off')
# Применяем вращение (azim) и рандомный наклон (elev)
ax.view_init(elev=random_elev, azim=random_angle)
# Вывод кадра
display.clear_output(wait=True)
display.display(plt.gcf())
plt.close(fig) # Важно: закрываем фигуру, чтобы не было утечки памяти
random_angle += 1
time.sleep(0.00000000001)
except Exception as e:
print(f"Произошла ошибка: {e}")