Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Здравствуйте. Спасибо за полезную инфу про уравнения а не матрицы. Во всём интернете только матрицы. Чем плохи матрицы? Решать матричные уравнения, получая обратную матрицу - слишком долгое занятие, к тому же не видно упрощений и сокращений...
Рекурсия присутствует?
И где эти прикрепленные файлы?
Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Visual Studio 2010
Статья по теме: 

Программа демонстрирует построение фрактала Ляпунова. В поле для ввода необходимо ввести строку, состоящую из символов А и В. При нажатии на кнопку Draw получаем изображение фрактала.
На рисунке жёлтый цвет соответствует стабильности, а темно-серый - хаосу.

Код программы: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Lyapunov_fractal
{
    public partial class Form1 : Form
    {
        //Инициализация bitmap и графики
        Bitmap myBitmap;
        Graphics g;
        //эпсилон для сравнивания действительных чисел
        const double Eps = 1E-5;
        //входная строка 
        string S;
        //массив для запоминания предела в каждой точке
        double[,] mas = new double[510, 510];
        //объявление предела (экспоненты Ляпунова)
        double limit = 0.0;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
        }
 
        //функция прорисовки фрактала
        private void Draw()
        {
            //проходим по всем точкам экрана
            for (int a = 1; a <= 500; a++)
            {
                for (int b = 1; b <= 500; b++)
                {
                    //в зависимости от значения предела в данной точке закрашиваем пиксель определенным цветом
                    if (mas[a, b] > 0) g.FillRectangle( 
new SolidBrush(Color.FromArgb((Math.Abs((int)mas[a, b]) * 25 + 10) % 255, 
(Math.Abs((int)mas[a, b]) * 25 + 10) % 255, 0)), a, b, 1, 1);
                    else g.FillRectangle(
new SolidBrush(Color.FromArgb(Math.Abs(240 - ((Math.Abs((int)mas[a, b] * 20)+30) % 255)), 
(Math.Abs(255 - (Math.Abs((int)mas[a, b] * 20) + 50) % 255)), 0)), a, b, 1, 1);
                }
            } 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //Создаем bitmap и графику из bitmap
            myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(myBitmap);
            //Сглаживание для графики
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            //считываем строку, состоящую из символов А и В
            S = textBox1.Text;
            //перебираем каждую точку
            for (int a = 1; a <= 500; a++)
            {
                for (int b = 1; b <= 500; b++)
                {
                    //переводим а и b в точки отрезка [0,4]
                    double x = a / 125.0;
                    double y = b / 125.0;
                    //начальное значение присваиваем 0.5
                    double xn = 0.5;
                    //переменная, которая в зависимости от значения символа строки будет изменяться
                    double rn;
                    //обнуление предела
                    limit = 0;
                    //вычисление предела
                    for (int i = 0; i < 1000; i++)
                    {
                        //проходимся по строке и в зависимости от символа (А или В) присваиваем переменной  rn текущее значение x или у
                        int index = i % S.Length;
                        if (S[index] == 'A')
                            rn = x;
                        else
                            rn = y;
                        //на каждом шаге вычисляем значение xn и предел
                        xn = rn * xn * (1 - xn);
                        limit += (Math.Log(Math.Abs(rn * (1 - 2 * xn))));
                    }
                    //для лучшего отображения предел уменьшаем
                    limit /= 500;
                    //если предел уходит на бесконечность, то присвоим ему новое значение
                    if (limit < -1000000000)
                    {
                        limit = -50.0;
                    }
                    if (limit > 1000000000)
                    {
                        limit = 50.0;
                    }
                    //запишем в массив значение предела в данной точке
                    mas[a, b] = limit;      
                }
            }
            //вызываем функцию прорисовки фрактала
            Draw();
            //отображаем bitmap на PictureBox
            pictureBox1.Image = myBitmap;
        }      
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
        }
 
    }
}

Прикрепленный файлРазмер
yakubova_Lyapunov_fractal.zip74.08 кб