Comments 31
Это великолепно, спасибо!
Красивенько!
Шикарно! Попробую перетолмачить это на Lua для движка Instead. Спасибо!
Добрый день. А вы можете пояснить почему собираетесь использовать Instead, а не Love2d?
Потому, что мне нравится API этого движка, а Love2d — скорее фреймворк для написания поверх него своего движка. В Instead можно без мороки раскидать визуализации по разным комнатам или объектам и получить удобное меню для навигации. Дополнить текстовыми пояснениями, если надо. Кроме того, у Instead есть репозиторий, куда можно будет эту программу выложить и она точно не затеряется среди всех этих сотен энтертейнмента на итче, стиме, гоге и т.д.
Спасибо!
Класс! Немного покопался и смог нарисовать аттрактор Aizawa. Спасибо автору за статью!
Потрясающе!
Не подскажите как вы сделали анимацию?
Вращаю камеру вокруг оси Z и с помощью imageio генерирую серию изображений, в конце объединяю изображения в видео.
Есть еще такая программулина как «Chaoscope», можно подглядеть режимы визуализации, для еще более красивых картинок.
Да, занимательная программа. У моей визуализации есть большой минус, который портит все впечатление — приходится каждый раз возвращаться в код, что бы изменить какой-нибудь параметр. Можно добавить виджетов и сделать интерфейс подобный «Chaoscope». Даже не знаю почему мне эта идея не пришла раньше. Но, насколько я помню, в «Chaoscope» изображение является статичным, а в Plotly его можно «вертеть» — мне это очень сильно понравилось.
Arneodo Attractor:
Arneodo Attractor:
Боже мой, это великолепно! Спасибо, за то, что напомнили об этом мире. (удивительном мире и самой поэзии математики)
Как бы хотелось иметь как минимум ещё одну жизнь, что бы посветить её познанию именно её (математики) безграничных горизонтов!
Она потрясающа!
Спасибо!
Как бы хотелось иметь как минимум ещё одну жизнь, что бы посветить её познанию именно её (математики) безграничных горизонтов!
Она потрясающа!
Спасибо!
* Подавил в себе желание написать что-то цинично-ядовитое, про любителей и про карьеру профессионалов. * I wish you luck, man.
В школе на спеки рисовал подобные вещи. Вот бы тому мне из прошлого тысячелетия рассказать, что оказывается это были аттракторы. Был бы отличный эффект бабочки.
Если запускать код по методике:
https://habr.com/ru/post/448316/
то все уже установлено
Да, в Google Colaboratory все уже установлено — можно с ходу начинать работать. Я как-то забыл об этом. Спасибо, что напомнили.
В дополнение можно сказать, что такой код при запуске не требует подтверждения аккаунта.
Включил и нарисовало.
Еще можно:
И еще есть список на несколько листов, что можно установить.
Если данные записывать на облачный диск, тогда пару раз в день может потребовать подтверждения аккаунта.
Включил и нарисовало.
Еще можно:
%pip install numpy-stl
%pip install plotly --upgrade
И еще есть список на несколько листов, что можно установить.
Если данные записывать на облачный диск, тогда пару раз в день может потребовать подтверждения аккаунта.
Я когда Google Colaboratory первый раз увидел, впал в небольшой ступор. До сих пор кажется невероятным, что кто-то может вот просто-так подарить какие-то мощности для вычислений.
А когда сработал
Определенно хорошая штука. Можно работать на двух машинах, что иногда бывает ну ооочень как надо.
А когда сработал
import numba
я впал в ступор во второй раз (ничего про бесплатные GPU и TPU я тогда еще не знал).Определенно хорошая штука. Можно работать на двух машинах, что иногда бывает ну ооочень как надо.
Я как раз такое задание давал на экзамене, только мы делали сетку начальных условий и со слайдерами.
Видео: www.youtube.com/watch?v=B9-sxUs-3wo.
Тоже питон, но не в браузере: pyqt, pyqtgraph, numba.
Видео: www.youtube.com/watch?v=B9-sxUs-3wo.
Тоже питон, но не в браузере: pyqt, pyqtgraph, numba.
Рис Семейство из пяти аттракторов
Чтобы отобразить семейство из пяти аттракторов, позволил себе немного изменить код, и сразу хочется выразить благодарности автору за хороший код для вхождения в тему:
import numpy as np
from scipy.integrate import odeint
import plotly.graph_objects as go
##################################
### РЕШАЕМ СИСТЕМУ УРАВНЕНИЙ ###
##################################
# Система уравнений:
def LorenzMod1(XYZ, t, alpha, beta, xi, delta):
x, y, z = XYZ
x_dt = -alpha*x + y*y - z*z + alpha*xi
y_dt = x*(y - beta*z) + delta
z_dt = -z + x*(beta*y + z)
return x_dt, y_dt, z_dt
# Параметры системы и начальные условия:
alpha = 0.1
beta = 4
xi = 14
delta = 0.08
#1111111111111111111111111111111
x_0, y_0, z_0 = 0, 1, 0
print ("1")
# Максимальное время и общее количество
# временных точек:
tmax, n = 100, 40000
# Интегрируем систему уравнений в каждой точке
# временного интервала t:
t = np.linspace(0, tmax, n)
c = np.linspace(0, 1, n)
f = odeint(LorenzMod1, (x_0, y_0, z_0),t, args=(alpha, beta, xi, delta))
X, Y, Z = f.T
# Параметры системы и начальные условия:
alpha = 0.1
beta = 4
xi = 14
delta = 0.08
#111111111111111111111111111111111111111111111111111111111111111111111
#2222222222222222222222
for ii in range(100001,100005,1):
i=ii/100000.0
print (i)
x_0, y_0, z_0 = 0, i, 0
# Максимальное время и общее количество
# временных точек:
tmax, n = 100, 40000
# Интегрируем систему уравнений в каждой точке
# временного интервала t:
t = np.linspace(0, tmax, n)
c1 = np.linspace(0, 1, n)
f = odeint(LorenzMod1, (x_0, y_0, z_0),t, args=(alpha, beta, xi, delta))
X1, Y1, Z1 = f.T
X=np.hstack((X1, X))
Y=np.hstack((Y1, Y))
Z=np.hstack((Z1, Z))
c=np.hstack((c1, c))
#22222222222222222222222222222222222222222222222222222222222222222222
#######################
### ВИЗУАЛИЗИРУЕМ ###
#######################
# Массив, отвечающий за изменение цвета:
#c = np.linspace(0, 1, len(X))
# Готовим данные для отрисовки:
DATA = go.Scatter3d(x=X, y=Y, z=Z,
line=dict(color= c,
width=3,
# Выбираем цветовую палитру:
# Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,
# Reds,Blues,Picnic,Rainbow,Portland,Jet,
# Hot,Blackbody,Earth,Electric,Viridis,Cividis.
colorscale="Cividis"),
# Рисуем только линии:
mode='lines')
fig = go.Figure(data=DATA)
# Задаем параметры отрисовки:
fig.update_layout(width=1000, height=1000,
margin=dict(r=10, l=10, b=10, t=10),
# Устанавливаем цвет фона:
paper_bgcolor='rgb(0,0,0)',
scene=dict(camera=dict(up=dict(x=0, y=0, z=1),
eye=dict(x=0, y=1, z=1)),
# Устанавливаем пропорциональное
# соотношение осей друг к другу:
aspectratio = dict(x=1, y=1, z=1),
# Отображаем, как указано в "aspectratio"
aspectmode = 'manual',
# Скрываем оси:
xaxis=dict(visible=False),
yaxis=dict(visible=False),
zaxis=dict(visible=False)
)
)
######################
#!! ВОСТОРГАЕМСЯ !!#
######################
fig.show()
Как уже говорили выше, все считается быстро, а отображается медленно.
Аналогичная проблема существует в отображении файлов формата STL, Выходом может быть сокращение входной информации перед отображением — это сечения. Для формата STL в сечении получатся отрезки в треугольниках, а в аттракторах, это будут точки и поэтому нужно много точек, которые в сечении уже можно соединить. В данном случае это будут семейство кривых по пяти точкам. И это в другой форме будет отражать решение системы уравнений.
Когда нужны подробности, сразу ищем карту с линиями уровня, или томограмму. Сечения это как аналог, и карты, и томограммы.
Рис Пример вывода сечений для формата STL
.
Отображать по несколько аттракторов — очень интересная идея. Есть все шансы (без всякой иронии) получить изображения на грани высокого искусства. Одни товарищи уже напечатали такое на бумаге формата А3 и кому-то подарили.
А отображается и правда медленно. Спасибо что разъяснили почему так происходит. Я думал, что все медленно считается и уже было серьезно подумывал о покупке нового компьютера.
А отображается и правда медленно. Спасибо что разъяснили почему так происходит. Я думал, что все медленно считается и уже было серьезно подумывал о покупке нового компьютера.
Вот такой вопрос возник — можно ли как-то преобразовать треки аттракторов в поверхности? Ну, например, с помошью реймаршинга и SDF-функций?
Я думаю — можно. Правда не знаю как, но используя NumPy и SciPy мне кажется все это получится сделать без всяких лишних танцев с бубном. А Plotly, кстати, очень качественно такие поверхности может отобразить.
Хорошо строятся поверхности типа колокола (без складок ), и на регулярных данных, когда соседние образующие линии имеют одинаковое количество точек и еще есть точка начала линии.
Если со складками, соседние образующие линии должны быть близко расположены.
Как раз в семействе аттракторов можно провести линии близко друг другу. И дальше может помочь формат STL. Берем две соседние линии, на каждой линии по две точки. По четырем точкам можно построить два треугольника, это и есть формат STL.
Это и есть два треугольника.
В каждой строчке по точке
При просмотре файла, для отображения объема, берут данные нормалей из формата или нормали считают сами программы. Есть и цветные STL.
При отображении поверхности можно задать прозрачность и отобразить только видимые поверхности.
Если поверхность STL полностью замкнута, тогда программы могут рассматривать поверхность как тело и взять то же сечение, только с ограничениями по количеству треугольников. У разных программ это разные цифры.
Еще есть порядок записи точек в треугольнике, это как направление обхода точек треугольника. При отображении свет будет по разному отражаться от таких треугольников, если один треугольник светлый, второй темный, хотя треугольники расположены рядом.
Если со складками, соседние образующие линии должны быть близко расположены.
Как раз в семействе аттракторов можно провести линии близко друг другу. И дальше может помочь формат STL. Берем две соседние линии, на каждой линии по две точки. По четырем точкам можно построить два треугольника, это и есть формат STL.
solid
facet normal 0.000000e+000 -9.144431e-001 4.047146e-001
outer loop
vertex 2.350000e+001 -1.070718e-001 1.283354e-001
vertex 2.425000e+001 -1.070718e-001 1.283354e-001
vertex 2.350000e+001 9.528544e-002 5.855569e-001
endloop
endfacet
facet normal 0.000000e+000 -9.144431e-001 4.047146e-001
outer loop
vertex 2.425000e+001 9.528544e-002 5.855569e-001
vertex 2.350000e+001 9.528544e-002 5.855569e-001
vertex 2.425000e+001 -1.070718e-001 1.283354e-001
endloop
endfacet
Это и есть два треугольника.
В каждой строчке по точке
При просмотре файла, для отображения объема, берут данные нормалей из формата или нормали считают сами программы. Есть и цветные STL.
При отображении поверхности можно задать прозрачность и отобразить только видимые поверхности.
Если поверхность STL полностью замкнута, тогда программы могут рассматривать поверхность как тело и взять то же сечение, только с ограничениями по количеству треугольников. У разных программ это разные цифры.
Еще есть порядок записи точек в треугольнике, это как направление обхода точек треугольника. При отображении свет будет по разному отражаться от таких треугольников, если один треугольник светлый, второй темный, хотя треугольники расположены рядом.
Sign up to leave a comment.
Визуализация странных аттракторов в Plotly — это шедеврально