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

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

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

Задача - построить фрактал Серпинского(треугольник и ковер).
На форме находятся 2 кнопки: Triangle и Carpet.
При клике на кнопку Triangle получаем изображение фрактала треугольника,
при клике на кнопку Carpet получаем изображение фрактала ковра.
Количество уровней по умолчанию составляет 5(переменная Level).

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

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace Serpinski
{
    public partial class Form1 : Form
    {
        private const int Level = 5;
        //Высота и ширина для отрисовки
        private int _width;
        private int _height;
        // Bitmap для фрактала
        private Bitmap _fractal;
        // используем для отрисовки на PictureBox
        private Graphics _graph;
 
        public Form1()
        {
            InitializeComponent();
            //инициализируем ширину и высоту
            _width = FractalPictureBox.Width;
            _height = FractalPictureBox.Height;
        }
 
        private void TriangleButton_Click(object sender, EventArgs e)
        {
            //создаем Bitmap для треугольника
            _fractal = new Bitmap(_width, _height);
            // cоздаем новый объект Graphics из указанного Bitmap
            _graph = Graphics.FromImage(_fractal);
            //вершины треугольника
            PointF topPoint = new PointF(_width / 2f, 0);
            PointF leftPoint = new PointF(0, _height);
            PointF rightPoint = new PointF(_width, _height);
            //вызываем функцию отрисовки
            DrawTriangle(Level, topPoint, leftPoint, rightPoint);
            //отображаем получившийся фрактал
            FractalPictureBox.BackgroundImage = _fractal;
        }
 
        private void CarpetButton_Click(object sender, EventArgs e)
        {
            //создаем Bitmap для прямоугольника
            _fractal = new Bitmap(_width, _height);
            // cоздаем новый объект Graphics из указанного Bitmap
            _graph = Graphics.FromImage(_fractal);
            //создаем прямоугольник и вызываем функцию отрисовки ковра
            RectangleF carpet = new RectangleF(0, 0, _width, _height);
            DrawCarpet(Level, carpet);
            //отображаем результат
            FractalPictureBox.BackgroundImage = _fractal;
        }
 
        private void DrawTriangle(int level, PointF top, PointF left, PointF right)
        {
            //проверяем, закончили ли мы построение
            if (level == 0)
            {
                PointF[] points = new PointF[3]
                {
                    top, right, left
                };
                //рисуем фиолетовый треугольник
                _graph.FillPolygon(Brushes.BlueViolet, points);
            }
            else
            {
                //вычисляем среднюю точку
                var leftMid = MidPoint(top, left); //левая сторона
                var rightMid = MidPoint(top, right); //правая сторона
                var topMid = MidPoint(left, right); // основание
                //рекурсивно вызываем функцию для каждого и 3 треугольников
                DrawTriangle(level - 1, top, leftMid, rightMid);
                DrawTriangle(level - 1, leftMid, left, topMid);
                DrawTriangle(level - 1, rightMid, topMid, right);
            }
        }
 
        //функция вычисления координат средней точки
        private PointF MidPoint(PointF p1, PointF p2)
        {
            return new PointF((p1.X + p2.X)/2f, (p1.Y + p2.Y)/2f);
        }
 
        private void DrawCarpet(int level, RectangleF carpet)
        {
            //проверяем, закончили ли мы построение
            if (level == 0)
            {
                //Рисуем прямоугольник
                _graph.FillRectangle(Brushes.OrangeRed, carpet);
            }
            else
            {
                // делим прямоугольник на 9 частей
                var width = carpet.Width/3f;
                var height = carpet.Height/3f;
                // (x1, y1) - координаты левой верхней вершины прямоугольника
                // от нее будем отсчитывать остальные вершины маленьких прямоугольников
                var x1 = carpet.Left;
                var x2 = x1 + width;
                var x3 = x1 + 2f*width;
 
                var y1 = carpet.Top;
                var y2 = y1 + height;
                var y3 = y1 + 2f*height;
 
                DrawCarpet(level - 1, new RectangleF(x1, y1, width, height)); // левый 1(верхний)
                DrawCarpet(level - 1, new RectangleF(x2, y1, width, height)); // средний 1
                DrawCarpet(level - 1, new RectangleF(x3, y1, width, height)); // правый 1
                DrawCarpet(level - 1, new RectangleF(x1, y2, width, height)); // левый 2
                DrawCarpet(level - 1, new RectangleF(x3, y2, width, height)); // правый 2
                DrawCarpet(level - 1, new RectangleF(x1, y3, width, height)); // левый 3
                DrawCarpet(level - 1, new RectangleF(x2, y3, width, height)); // средний 3
                DrawCarpet(level - 1, new RectangleF(x3, y3, width, height)); // правый 3
            }
        }
    }
}

Прикрепленный файлРазмер
Serpinski.zip52.27 кб