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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

Рейтинг@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 кб