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

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

Построения
на плоскости (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 2013
Статья по теме: 

Построить фрактал папоротник Барнсли, используя библиотеку System.Drawing.
Создаем проект Windows Form, на форму добавляем PictureBox
(FernPictureBox, размер - 800х640)

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

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace Fern
{
    public partial class Form1 : Form
    {
        // Задаем диапазон значений для точек
        private const float MinX = -6;
        private const float MaxX = 6;
        private const float MinY = 0.1f;
        private const float MaxY = 10;
        // Количество точек для отрисовки
        private const int PointNumber = 200000;
        // Массив коэффциентов вероятностей
        private float[] _probability = new float[4]
        {
            0.01f,
            0.06f,
            0.08f,
            0.85f
        };
        // Матрица коэффициентов
        private float[,] _funcCoef = new float[4, 6]
        {
            //a      b       c      d      e  f
            {0,      0,      0,     0.16f, 0, 0   }, // 1 функция
            {-0.15f, 0.28f,  0.26f, 0.24f, 0, 0.44f},// 2 функция
            {0.2f,  -0.26f,  0.23f, 0.22f, 0, 1.6f}, // 3 функция
            {0.85f,  0.04f, -0.04f, 0.85f, 0, 1.6f}  // 4 функция
        };
 
        // коэффициент масштабируемости высоты и ширины
        // изображения фрактала для высоты и ширины нашей формы
        private int _width;
        private int _height;
        // Bitmap для папоротника
        private Bitmap _fern;
        // используем для отрисовки на PictureBox
        private Graphics _graph;
 
        public Form1()
        {
            InitializeComponent();
 
            // вычисляем коэффициент
            _width = (int)(FernPictureBox.Width/(MaxX - MinX));
            _height = (int)(FernPictureBox.Height/(MaxY - MinY));
            // создаем Bitmap для папоротника
            _fern = new Bitmap(FernPictureBox.Width, FernPictureBox.Height);
            // cоздаем новый объект Graphics из указанного Bitmap
            _graph = Graphics.FromImage(_fern);
            // устанавливаем фон
            _graph.Clear(Color.Black);
 
            DrawFern();
        }
 
        private void DrawFern()
        {
            Random rnd = new Random();
            // будем начинать рисовать с точки (0, 0)
            float xtemp = 0, ytemp = 0;
            // переменная хранения номера функции для вычисления следующей точки
            int numF = 0;
 
            for (int i = 1; i <= PointNumber; i++)
            {
                // рандомное число от 0 до 1
                var num = rnd.NextDouble();
                // проверяем какой функцией воспользуемся для вычисления следующей точки
                for (int j = 0; j <= 3; j++)
                {
                    // если рандомное число оказалось меньше или равно
                    // заданного коэффициента вероятности,
                    // задаем номер функции
                    num = num - _probability[j];
                    if (num <= 0)
                    {
                        numF = j;
                        break;
                    }
                }
 
                // вычисляем координаты
                var x = _funcCoef[numF, 0] * xtemp + _funcCoef[numF, 1] * ytemp + _funcCoef[numF, 4];
                var y = _funcCoef[numF, 2] * xtemp + _funcCoef[numF, 3] * ytemp + _funcCoef[numF, 5];
 
                // сохраняем значения для следующей итерации
                xtemp = x;
                ytemp = y;
                // вычисляем значение пикселя
                x = (int)(xtemp * _width + FernPictureBox.Width / 2);
                y = (int)(ytemp * _height);
                // устанавливаем пиксель в Bitmap
                _fern.SetPixel((int)x, (int)y, Color.LawnGreen);
            }
            // Отображаем результат
            FernPictureBox.BackgroundImage = _fern;
        }
    }   
}

Прикрепленный файлРазмер
FernFractal.zip56.84 кб