Главная страница 1
скачать файл



ПГУ им. Т.Г. Шевченко

физико-математический факультет

кафедра теоретической физики

Курсовая работа



«Фрактальная структура аттракторов».

Выполнил:

студент 503 группы

физико-математического

факультета

Великодный Виталий

Проверил:

доцент кафедры ТФ

Соковнич С.М.

Тирасполь

2011

Содержание



Введение 3

Отображение Эно 4

Фазовое пространство и аттракторы 9

Заключение 14

Список литературы 15

Приложение 1. 16

Введение.

Целью данной курсовой работы является показание фрактальной структуры аттракторов. Покажем это на примере аттрактора двумерного отображения Эно.

Введем следующие определения:

Отображение – представление функции в виде Xn+1=f(Xn).

В данной курсовой работе будут также использоваться такие виды отображений, как логистическое.

Фрактал – сложная геометрическая фигура, обладающая свойством самоподобия, то есть составленная из нескольких частей, каждая из которых подобна всей фигуре целиком.

Отображение Эно.

Рассмотрим пример двумерного отображения, широко используемого в нелинейной динамике.

Как известно, простейшим одномерным отображением со сложной динамикой является логистическое отображение

которое описывает, например, динамику биологической популяции. Тогда возникает правомерный вопрос: нельзя ли построить двумерное обобщение логистического отображения? Это можно сделать различными способами, наиболее простым из которых является следующий. При введении одномерного отображения мы предполагали, что численность популяции в (n+1)-ый год зависит лишь от ее численности в n-ый год. Предположим теперь, что память «глубже», т.е. численность популяции в (n+1)-ый год зависит как от численности в n-ом году, так и от численности в (n-1)-ом году. Будет считать, что последняя зависимость должна быть слабой, поэтому будем полагать ее линейной. Тогда отображение запишется в виде



где b – некоторый новый коэффициент.

Введем теперь обозначение yn+1 = xn. Тогда предыдущее уравнение можно переписать в виде

Это и есть искомое двумерное отображение. Если использовать другой вариант исходного логистического отображения, то можно прийти к записи в виде



Такое отображение впервые предложил французский астрофизик Мишель Эно (M. Hénon), и оно носит его имя. Отметим, что Эно не использовал биологическую интерпретацию, а действовал чисто математическими методами, конструируя простейшие двумерные квадратичные отображения со сложной динамикой.

Несмотря на это, отображение Эно может описывать поведение и некоторых физических систем. Пример одной из них приведена на рис. 1: на поверхности вязкой жидкости находится лодочка с закрепленным на ней магнитом.

Если рядом расположить электромагниты, питаемые короткими импульсами тока, то отображение, задающее координаты лодочки через интервалы времени, равные периоду следования импульсов, будет представлять собой отображение Эно.



Рис. 1. Схематическое изображение системы, динамика которой описывается отображением Эно.

Отображение Эно допускает аналитический поиск не только неподвижной точки, но и 2-цикла. Сначала найдем неподвижную точку отображения Эно. Для этого надо решить следующую систему

Отсюда следует, что





Таким образом, при выполнении условия



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

Теперь найдем 2-цикл отображения. Для его элементов справедливы соотношения

Тогда


Складывая и вычитая первое и второе уравнения, легко находим



Из первого уравнения следует, что



В свою очередь, подставляя этот результат во второе уравнение и используя очевидное соотношение



Получим


Отсюда следует, что, согласно теореме Виета, x1 и x2 являются корнями следующего квадратного уравнения



из которого легко находятся элементы цикла:



Нетрудно видеть, в частности, что корни существуют только при условии



откуда следует, что 2-цикл рождается при условии



На рис. 2 показано бифуркационное дерево отображения Эно при b=0,3. Можно видеть, что оно демонстрирует не только рождение устойчивого 2-цикла из неподвижной точки, но и весь каскад бифуркаций удвоения периода, хаос и окна периодичности в хаосе. Новым по сравнению с логистическим отображением является то, что дерево иногда скачком «разбухает», то есть размер аттрактора резко увеличивается. Такое явление в нелинейной динамике называют кризисом. Оно встречается достаточно часто и обыкновенно возникает, если в системе присутствует мультистабильность: в этом случае при определенных значениях параметров два аттрактора могут слиться в один, и именно этот момент отображается на дереве в виде его резкого расширения. Возможны, однако, и другие варианты кризисов.

Отметим, что динамика отображения Эно на самом деле столь многообразна, что ему можно посвятить целую монографию. Более того, многие современные исследователи по-прежнему используют отображения Эно в своих работах.

Рис. 2. Бифуркационное дерево отображения Эно при b=0,3.

Фазовое пространство и аттракторы.

Зададимся вопросом: как проследить за эволюцией динамической системы при заданных начальных условиях? Для этого нужно «увидеть», что происходит с задающими динамическую систему переменными x, y, ... по мере эволюции во времени. Введем некоторое пространство, по осям координат которого отложим эти переменные. Его принято называть фазовым пространством.

Фраза «задано начальное состояние динамической системы» теперь означает, что задана точка в фазовом пространстве. «Включим» время. Если система определена дискретным отображением, например, отображением Эно или отображением прыгающего шарика, то изображающая точка при каждой итерации будет совершать «прыжки» в фазовом пространстве.

Динамическая система полностью задает закон эволюции во времени, однако, чтобы получить полную информацию о характере такой эволюции, надо провести исследование для различных начальных условий. Современные компьютеры делают эту задачу не умозрительной, а вполне реальной и позволяют получать наглядные геометрические образы такого процесса. Итак, рассмотрим множество начальных состояний системы. В фазовом пространстве в этом случае будем иметь уже не одну изображающую точку, а некоторый набор, или облако точек. При «включении» времени они все начнут совершать «прыжки». При компьютерном моделировании разумно создать мгновенные «снимки» облака через определенные промежутки времени (число итераций). Тогда можно следить за эволюцией облака на экране дисплея. Перейдем к компьютерному моделированию. В качестве исследуемой системы выберем отображение Эно. На рис. 3 показаны мгновенные «снимки» облака изображающих точек на фазовой плоскости для отображения Эно, сделанные через одну итерацию.

Наиболее существенный результат, вытекающий из компьютерного моделирования, состоит в том, что облако изображающих точек «конденсируется» на некоторые предельные объекты, размерность которых меньше, чем размер ность фазового пространства. Их называют аттракторами (от английского to attract – притягивать). Полезно также привести сравнительно строгое определение: аттрактором называется множество в фазовом пространстве, обладающее следующими свойствами:

1. Его размерность меньше, чем размерность фазового пространства (т.е. для двумерных отображений, например, аттрактором не может быть некоторая область плоскости).

2. Это множество инвариантно относительно действия отображения (т.е. если точка принадлежит аттрактору, то после действия отображения она останется на аттракторе).

3. Существует некоторое множество в фазовом пространстве, обязательно включающее аттрактор и его некоторую малую окрестность, все точки которого после некоторого (быть может, очень большого) количества итераций отображения окажутся на аттракторе. Это множество называется бассейном притяжения (или просто бассейном) аттрактора.



Рис. 3. Конденсация облака изображающих точек в фазовом пространстве для отображения Эно. Значения параметров λ=1,4, b=0,3.

Поскольку в соответствии с первым свойством размерность аттрактора меньше, чем размерность фазового пространства (это хорошо заметно на рис. 3), то занимаемый выбранным облаком точек объем в фазовом пространстве (обычно его называют фазовым объемом) должен уменьшаться при итерациях отображения. Динамические системы, которые обладают таким свойством (а, следовательно, и аттракторами) называются диссипативными, а динамические системы, фазовый объем в которых не изменяется со временем – консервативными. Поведение диссипативных и консервативных динамических систем весьма различно, и в настоящей книге мы будем рассматривать только диссипативные системы.

Важной характеристикой отображения, позволяющей судить о наличии сжатия фазового пространства, является его якобиан.

Пусть имеется двумерное отображение общего вида

Неподвижная точка этого отображения удовлетворяет условию



Динамика малых возмущений этой неподвижной точки в линейном приближении будет описываться соотношением:



где матрица возмущений M составлена из соответствующих производных



Определитель



этой матрицы, вычисленный в неподвижной точке, называется якобианом и определяет, как известно из математического анализа, эволюцию малого элемента площади при действии отображения. При



этот элемент сжимается, так что отображение будет диссипативным. Если



то отображение оказывается консервативным, и фазовый объем по мере эволюции не меняется.

Найдем для примера якобиан отображения Эно. Вычисляя соответствующие частные производные, находим:

В этом случае якобиан J = b. Таким образом, параметр b управляет степенью сжатия фазового элемента. При b = 0 оно «бесконечно сильное», так что отображение Эно редуцирует к одномерному логистическому отображению. При b = 1 реализуется противоположный предельный случай – консервативная система.

Отображение Эно представляет пример систем с постоянным якобианом. В более общем случае якобиан системы может зависеть от значений динамических переменных, так что в отдельных областях фазового пространства наблюдается сжатие, а в других – растяжения фазового элемента. В этом случае могут возникать новые эффекты, которые будут обсуждаться ниже.

Итак, диссипативные динамические системы обладают аттракторами. Это свойство является очень важным и существенно упрощает процесс исследования таких систем. Ведь вследствие притяжения к аттрактору траектории, стартовавшие из различных точек, с течение времени приходят к одной и той же, то есть со временем система «забывает» начальные условия и ее поведение определяется только значениями параметров. Следовательно, для изучения поведения диссипативной динамической системы достаточно исследовать ее аттракторы. Это, в частности, существенно упрощает компьютерное моделирование: не надо следить за всеми изображающими точками. Достаточно выбрать одну из них, выполнить определенное (не очень маленькое) число итераций, чтобы эта точка «вышла» на аттрактор, а затем вывести ее движение на экран компьютера. Тогда мы и получим портрет аттрактора.

Аттракторы динамических систем могут быть как очень простыми (неподвижная точка, цикл определенного периода), так и более сложными. Пример такого сложного аттрактора дает рис. 3, демонстрирующий, что изображающие точки притягиваются к некоторой сложной слоистой структуре. Если просмотреть с помощью компьютера как «микроскопа» отдельные фрагменты такого аттрактора, то обнаруживается, что он весь состоит из отдельных «нитей» и областей пустого пространства, причем каждая нить в свою очередь имеет аналогичную тонкую структуру (см. рис. 4). Как говорят, аттрактор в этом случае обладает фрактальными свойствами. Подобные аттракторы были обнаружены в семидесятые годы нашего века и получили название странных. Обыкновенно (но не всегда) им соответствует режим динамического хаоса.

Рис.4. Фрактальная структура аттрактора отображения Эно. Значения параметров λ=1,4 и b=0,3.

Заключение.

Исследуя рис. 4 очевидно заключить, что при каждом последующем увеличении необходимого фрагмента аттрактора отображения Эно мы будем получать идентичный рисунок, что можно показать из второго и третьего графиков из рис.4.

Следуя из определения фракталов (сложная геометрическая фигура, обладающая свойством самоподобия, то есть составленная из нескольких частей, каждая из которых подобна всей фигуре целиком), данное утверждение показывает то, что отображение Эно обладает фрактальной структурой, доказательство чего и являлось целью данной курсовой работы.

Список литературы.



  1. Кузнецов С. П. «Динамический хаос», М.: ФИЗМАТЛИТ, 2006.

  2. Шустер Г. « Детерминированный хаос», М.: Мир, 1988.

  3. Заславский Г.М., Сагдеев Р.З. «Введение в нелинейную физику: от маятника до турбулентности и хаоса», М.: Наука, 1988.

  4. Фейгенбаум М. «Универсальность в поведении нелинейных систем», М.: Успехи физических наук, 1983.

  5. Кузнецов А.П., Савин А.В., Тюрюкина Л.В. «Введение в физику нелинейных отображений», Саратов: Научная книга, 2010.

  6. Кроновер Р.М. «Фракталы и хаос в динамических системах», М.: Постмаркет, 2000.

  7. Шредер М. «Фракталы, хаос, степенные законы», М.:Наука, 2001.

Приложение 1.

namespace Eno

{

partial class MainForm



{

///

/// Required designer variable.

///

private System.ComponentModel.IContainer components = null;

///

/// Clean up any resources being used.

///

///
true if managed resources should be disposed; otherwise, false.

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))



{

components.Dispose();

}

base.Dispose(disposing);



}

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

this.pictureBox = new System.Windows.Forms.PictureBox();



this.buttonShow = new System.Windows.Forms.Button();

this.numericNumOfIterations = new System.Windows.Forms.NumericUpDown();

this.labelNumOfIterations = new System.Windows.Forms.Label();

this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();

this.label1 = new System.Windows.Forms.Label();

this.label2 = new System.Windows.Forms.Label();

this.numericB = new System.Windows.Forms.NumericUpDown();

this.numericA = new System.Windows.Forms.NumericUpDown();

this.buttonUp = new System.Windows.Forms.Button();

this.buttonRight = new System.Windows.Forms.Button();

this.buttonLeft = new System.Windows.Forms.Button();

this.buttonDown = new System.Windows.Forms.Button();

this.buttonReset = new System.Windows.Forms.Button();

this.buttonZoomIn = new System.Windows.Forms.Button();

this.buttonZoomOut = new System.Windows.Forms.Button();

((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();

((System.ComponentModel.ISupportInitialize)(this.numericNumOfIterations)).BeginInit();

((System.ComponentModel.ISupportInitialize)(this.numericB)).BeginInit();

((System.ComponentModel.ISupportInitialize)(this.numericA)).BeginInit();

this.SuspendLayout();

//

// pictureBox



//

this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

| System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.pictureBox.BackColor = System.Drawing.Color.White;

this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

this.pictureBox.Location = new System.Drawing.Point(178, 12);

this.pictureBox.Name = "pictureBox";

this.pictureBox.Size = new System.Drawing.Size(385, 356);

this.pictureBox.TabIndex = 0;

this.pictureBox.TabStop = false;

//


// buttonShow

//


this.buttonShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));

this.buttonShow.Location = new System.Drawing.Point(12, 332);

this.buttonShow.Name = "buttonShow";

this.buttonShow.Size = new System.Drawing.Size(160, 35);

this.buttonShow.TabIndex = 1;

this.buttonShow.Text = "Сохранить";

this.buttonShow.UseVisualStyleBackColor = true;

this.buttonShow.Click += new System.EventHandler(this.buttonShow_Click);

this.buttonShow.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

//


// numericNumOfIterations

//


this.numericNumOfIterations.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));

this.numericNumOfIterations.Location = new System.Drawing.Point(110, 306);

this.numericNumOfIterations.Name = "numericNumOfIterations";

this.numericNumOfIterations.Size = new System.Drawing.Size(62, 20);

this.numericNumOfIterations.TabIndex = 2;

this.numericNumOfIterations.Value = new decimal(new int[] {

1,

0,

0,



0});

this.numericNumOfIterations.ValueChanged += new System.EventHandler(this.numeric_ValueChanged);

this.numericNumOfIterations.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

//


// labelNumOfIterations

//


this.labelNumOfIterations.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));

this.labelNumOfIterations.AutoSize = true;

this.labelNumOfIterations.Location = new System.Drawing.Point(12, 308);

this.labelNumOfIterations.Name = "labelNumOfIterations";

this.labelNumOfIterations.Size = new System.Drawing.Size(92, 13);

this.labelNumOfIterations.TabIndex = 3;

this.labelNumOfIterations.Text = "Число итераций:";

//


// saveFileDialog

//


this.saveFileDialog.FileName = "Снимок";

this.saveFileDialog.Filter = "Рисунки|*.png|Все файлы|*.*";

//

// label1



//

this.label1.AutoSize = true;

this.label1.Location = new System.Drawing.Point(82, 282);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(22, 13);

this.label1.TabIndex = 4;

this.label1.Text = "b =";

//


// label2

//


this.label2.AutoSize = true;

this.label2.Location = new System.Drawing.Point(82, 256);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size(22, 13);

this.label2.TabIndex = 5;

this.label2.Text = "a =";

//

// numericB



//

this.numericB.DecimalPlaces = 2;

this.numericB.Increment = new decimal(new int[] {

1,

0,



0,

65536});


this.numericB.Location = new System.Drawing.Point(110, 280);

this.numericB.Maximum = new decimal(new int[] {

10,

0,

0,



0});

this.numericB.Name = "numericB";

this.numericB.Size = new System.Drawing.Size(62, 20);

this.numericB.TabIndex = 6;

this.numericB.Value = new decimal(new int[] {

14,


0,

0,

65536});



this.numericB.ValueChanged += new System.EventHandler(this.numeric_ValueChanged);

this.numericB.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

//

// numericA



//

this.numericA.DecimalPlaces = 2;

this.numericA.Increment = new decimal(new int[] {

1,

0,



0,

65536});


this.numericA.Location = new System.Drawing.Point(110, 254);

this.numericA.Maximum = new decimal(new int[] {

10,

0,

0,



0});

this.numericA.Name = "numericA";

this.numericA.Size = new System.Drawing.Size(62, 20);

this.numericA.TabIndex = 7;

this.numericA.Value = new decimal(new int[] {

22,


0,

0,

65536});



this.numericA.ValueChanged += new System.EventHandler(this.numeric_ValueChanged);

this.numericA.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

//

// buttonUp



//

this.buttonUp.Location = new System.Drawing.Point(72, 58);

this.buttonUp.Name = "buttonUp";

this.buttonUp.Size = new System.Drawing.Size(32, 32);

this.buttonUp.TabIndex = 9;

this.buttonUp.Text = "↑";

this.buttonUp.UseVisualStyleBackColor = true;

this.buttonUp.Click += new System.EventHandler(this.buttonUp_Click);

//

// buttonRight



//

this.buttonRight.Location = new System.Drawing.Point(110, 96);

this.buttonRight.Name = "buttonRight";

this.buttonRight.Size = new System.Drawing.Size(32, 32);

this.buttonRight.TabIndex = 10;

this.buttonRight.Text = "→";

this.buttonRight.UseVisualStyleBackColor = true;

this.buttonRight.Click += new System.EventHandler(this.buttonRight_Click);

//

// buttonLeft



//

this.buttonLeft.Location = new System.Drawing.Point(34, 96);

this.buttonLeft.Name = "buttonLeft";

this.buttonLeft.Size = new System.Drawing.Size(32, 32);

this.buttonLeft.TabIndex = 11;

this.buttonLeft.Text = "←";

this.buttonLeft.UseVisualStyleBackColor = true;

this.buttonLeft.Click += new System.EventHandler(this.buttonLeft_Click);

//

// buttonDown



//

this.buttonDown.Location = new System.Drawing.Point(72, 134);

this.buttonDown.Name = "buttonDown";

this.buttonDown.Size = new System.Drawing.Size(32, 32);

this.buttonDown.TabIndex = 12;

this.buttonDown.Text = "↓";

this.buttonDown.UseVisualStyleBackColor = true;

this.buttonDown.Click += new System.EventHandler(this.buttonDown_Click);

//

// buttonReset



//

this.buttonReset.Location = new System.Drawing.Point(72, 96);

this.buttonReset.Name = "buttonReset";

this.buttonReset.Size = new System.Drawing.Size(32, 32);

this.buttonReset.TabIndex = 13;

this.buttonReset.Text = "×";

this.buttonReset.UseVisualStyleBackColor = true;

this.buttonReset.Click += new System.EventHandler(this.buttonReset_Click);

//

// buttonZoomIn



//

this.buttonZoomIn.Location = new System.Drawing.Point(34, 12);

this.buttonZoomIn.Name = "buttonZoomIn";

this.buttonZoomIn.Size = new System.Drawing.Size(32, 32);

this.buttonZoomIn.TabIndex = 14;

this.buttonZoomIn.Text = "+";

this.buttonZoomIn.UseVisualStyleBackColor = true;

this.buttonZoomIn.Click += new System.EventHandler(this.buttonZoomIn_Click);

//

// buttonZoomOut



//

this.buttonZoomOut.Location = new System.Drawing.Point(110, 12);

this.buttonZoomOut.Name = "buttonZoomOut";

this.buttonZoomOut.Size = new System.Drawing.Size(32, 32);

this.buttonZoomOut.TabIndex = 15;

this.buttonZoomOut.Text = "-";

this.buttonZoomOut.UseVisualStyleBackColor = true;

this.buttonZoomOut.Click += new System.EventHandler(this.buttonZoomOut_Click);

//

// MainForm



//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(575, 380);

this.Controls.Add(this.buttonZoomOut);

this.Controls.Add(this.buttonZoomIn);

this.Controls.Add(this.buttonReset);

this.Controls.Add(this.buttonDown);

this.Controls.Add(this.buttonLeft);

this.Controls.Add(this.buttonRight);

this.Controls.Add(this.buttonUp);

this.Controls.Add(this.numericA);

this.Controls.Add(this.numericB);

this.Controls.Add(this.label2);

this.Controls.Add(this.label1);

this.Controls.Add(this.labelNumOfIterations);

this.Controls.Add(this.numericNumOfIterations);

this.Controls.Add(this.buttonShow);

this.Controls.Add(this.pictureBox);

this.Name = "MainForm";

this.Text = "Отображение Эно";

this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();

((System.ComponentModel.ISupportInitialize)(this.numericNumOfIterations)).EndInit();

((System.ComponentModel.ISupportInitialize)(this.numericB)).EndInit();

((System.ComponentModel.ISupportInitialize)(this.numericA)).EndInit();

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion



private System.Windows.Forms.PictureBox pictureBox;

private System.Windows.Forms.Button buttonShow;

private System.Windows.Forms.NumericUpDown numericNumOfIterations;

private System.Windows.Forms.Label labelNumOfIterations;

private System.Windows.Forms.SaveFileDialog saveFileDialog;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.NumericUpDown numericB;

private System.Windows.Forms.NumericUpDown numericA;

private System.Windows.Forms.Button buttonUp;

private System.Windows.Forms.Button buttonRight;

private System.Windows.Forms.Button buttonLeft;

private System.Windows.Forms.Button buttonDown;

private System.Windows.Forms.Button buttonReset;

private System.Windows.Forms.Button buttonZoomIn;

private System.Windows.Forms.Button buttonZoomOut;

}

}

using System;



using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Eno

{

public partial class MainForm : Form



{

public MainForm()

{

InitializeComponent();



}

Color back = Color.FromArgb(255, 255, 224);

Color fore = Color.FromArgb(84, 84, 67);

double x0 = 0;

double y0 = 0;

double len = 2;

private bool checkPixel(double x, double y, double a, double b) {

int i, N = (int)numericNumOfIterations.Value;

double yold;

for (i = 0; i < N; i++) {

yold = y;

y = (x - 1 + a * y * y) / b;

x = yold;

}

if (Math.Abs(x) <= 2 && Math.Abs(y) <= 2)



return true;

return false;

}

private void showGraph()



{

double xmin = x0 - len, xmax = x0 + len;

double ymin = y0 - len, ymax = y0 + len;

double a = (double)numericA.Value;

double b = (double)numericB.Value;

int width = pictureBox.Width;

int height = pictureBox.Height;

Bitmap bm = new Bitmap(width, height);

int x, y;

double dx, dy;

double stepx = (xmax - xmin) / width;

double stepy = (ymax - ymin) / height;

for (y = 0, dy = 0; y < height; y++, dy += stepy)

for (x = 0, dx = 0; x < width; x++, dx += stepx)

if (checkPixel(xmin + dx, ymax - dy, a, b))

bm.SetPixel(x, y, fore);

else

bm.SetPixel(x, y, back);



pictureBox.Image = bm;

}

private void buttonShow_Click(object sender, EventArgs e)



{

if (saveFileDialog.ShowDialog() == DialogResult.OK)

pictureBox.Image.Save(saveFileDialog.FileName + ".png");

}

private void Form1_KeyDown(object sender, KeyEventArgs e)



{

switch (e.KeyCode)

{

case Keys.Add:



len *= 0.9;

break;


case Keys.Subtract:

len /= 0.9;

break;

case Keys.Left:



x0 -= len / 10;

break;


case Keys.Right:

x0 += len / 10;

break;

case Keys.Up:



y0 += len / 10;

break;


case Keys.Down:

y0 -= len / 10;

break;

case Keys.PageUp:



numericNumOfIterations.Value++;

break;


case Keys.PageDown:

numericNumOfIterations.Value--;

break;

}

showGraph();



}

private void numeric_ValueChanged(object sender, EventArgs e)

{

showGraph();



}

private void Form1_Paint(object sender, PaintEventArgs e)

{

showGraph();



}

private void buttonZoomIn_Click(object sender, EventArgs e)

{

len *= 0.9;



}

private void buttonZoomOut_Click(object sender, EventArgs e)

{

len /= 0.9;



}

private void buttonLeft_Click(object sender, EventArgs e)

{

x0 -= len / 10;



}

private void buttonRight_Click(object sender, EventArgs e)

{

x0 += len / 10;



}

private void buttonUp_Click(object sender, EventArgs e)

{

y0 += len / 10;



}

private void buttonDown_Click(object sender, EventArgs e)

{

y0 -= len / 10;



}

private void buttonReset_Click(object sender, EventArgs e)

{

x0 = 0;


y0 = 0;

len = 2;


}

}

}



скачать файл



Смотрите также:
Курсовая работа «Фрактальная структура аттракторов»
164.87kb.
Курсовая работа Оглавление
292.34kb.
Курсовая работа «Политическое управление в России ХХ века»
184.19kb.
Курсовая работа Проблема страдающей личности в творчестве Еврипида
252.13kb.
Настоящая курсовая работа посвящена изучению фразеологизмов с компонентом «дом» в современном английском языке
307.33kb.
Курсовая работа по дисциплине "Банковское дело "
68.54kb.
Курсовая работа Тумахович Зоя Глебовна Специальность 050202 Информатика
280.84kb.
Курсовая работа Волгоград 2012
407.64kb.
Тематическое планирование курса информатики и икт в 11 классе
99.34kb.
Курсовая работа по истории государства и права зарубежных стран тема: "феодальное государство в германии"
440.89kb.
Курсовая работа студентки курса гуманитарного факультета Учебная дисциплина: История христианства Тема: Жизнь и учение Иисуса Христа Оценка: г. Одесса план
682.67kb.
Курсовая работа По дисциплине: "Организация и планирование производства. Управление предприятием"
287.67kb.