Творческое программирование в обработке | Набор 2 (Аттрактор Лоренца)

Опубликовано: 14 Июля, 2021

Творческое программирование в обработке | Набор 1 (Случайный ходун)
Система Лоренца - это система обыкновенных дифференциальных уравнений, впервые изученная Эдвардом Нортоном Лоренцом, американским математиком и метеорологом примерно в 1963 году. Она примечательна тем, что имеет хаотические решения для определенных значений параметров и начальных условий. Он был получен из упрощенной модели конвекции в земной атмосфере. Это также естественно возникает в моделях лазеров и динамо. Аттрактор Лоренца представляет собой набор хаотических решений системы Лоренца, которые при нанесении на график напоминают бабочку или восьмерку. Следующее изображение появилось в журнале Nature 31 августа 2000 г., стр. 949 как часть статьи под названием «Аттрактор Лоренца существует», написанной Яном Стюартом.

Система аттракторов Лоренца чаще всего выражается в виде трех связанных нелинейных дифференциальных уравнений:

В приведенной выше системе уравнений «a» иногда называют числом Прандтля, а «b» - числом Рэлея. Один из часто используемых наборов констант - a = 10, b = 28, c = 8/3. Другой - a = 28, b = 46,92, c = 4.

Пример реализации дифференциальных уравнений на java: -




int i = 0;
double x0, y0, z0, x1, y1, z1;
double h = 0.01, a = 10.0, b = 28.0, c = 8.0 / 3.0;
  
x0 = 0.1;
y0 = 0;
z0 = 0;
for (i = 0; i < N; i++) {
    x1 = x0 + h * a * (y0 - x0);
    y1 = y0 + h * (x0 * (b - z0) - y0);
    z1 = z0 + h * (x0 * y0 - c * z0);
    x0 = x1;
    y0 = y1;
    z0 = z1;
    // Printing the coordinates
    if (i > 100)
        System.out.println(i + " " + x0 + " " + y0 + " " + z0);
}

Мы попытаемся визуально реализовать описанную выше логику в Processing Java. Поскольку мы будем рисовать точки в 3D, нам понадобится средство 3D-рендеринга. В следующей реализации мы будем использовать средство визуализации OPENGL, но также можно использовать средство визуализации P3D. Нам также необходимо использовать внешнюю библиотеку обработки под названием PeasyCam, которая помогает нам создавать интерактивный объект камеры для рабочего процесса в 3D-среде. PeasyCam можно загрузить с помощью Processing IDE из инструментов -> Добавить инструмент -> Библиотеки.

Мы также будем использовать следующие функции для представления структуры Аттрактора Лоренца:

  • beginShape() - начинает запись вершин фигуры.
  • endShape() - останавливает запись вершин фигуры.
  • vertex() - эта функция используется для указания координат вершин для точек, линий, треугольников, четырехугольников и многоугольников. Он используется исключительно в beginShape() и endShape() .

Реализация Аттрактора Лоренца в Обработке java: -




/* FINAL SKETCH FOR LORENZ ATTRACTOR */
import peasy.*; // Importing peasy package
// Initialization
float x = 0.01 , y = 0 , z = 0 ;
float a = 10 , b = 28 , c = 8.0 / 3.0 ;
// ArrayList of PVector objects to store
// the position vectors of the points to be plotted.
ArrayList<PVector> points = new ArrayList<PVector>();
PeasyCam cam; // Declaring PeasyCam object
void setup()
{
// Creating the output window
// and setting up the OPENGL renderer
size( 800 , 600 , OPENGL);
// Initializing the cam object
cam = new PeasyCam( this , 500 );
}
void draw()
{
background( 0 );
// Implementation of the differential equations
float dt = 0.01 ;
float dx = (a * (y - x)) * dt;
float dy = (x * (b - z) - y) * dt;
float dz = (x * y - c * z) * dt;
x += dx;
y += dy;
z += dz;
// Adding the position vectors to points ArrayList
points.add( new PVector(x, y, z));
translate( 0 , 0 , - 80 );
scale( 5 );
stroke( 255 );
noFill();
// Beginning plotting of points
beginShape();
for (PVector v : points) {
// Adding random color to the structure in each frame
stroke(random( 0 , 255 ), random( 0 , 255 ), random( 0 , 255 ));
vertex(vx, vy, vz); // plotting the vertices
}
endShape(); // Drawing ends
}

Выход:-

Исходные материалы -

  • The Coding Train Coding Challenges Дэниел Шиффман.
  • Аттрактор Лоренца в 3D от Пола Бурка.

Автор статьи: Сумик Ракшит . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.