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

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

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

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace Demo_FunDots
{
    public partial class MainForm : Form
    {
        //объявление Bitmap и графики
        Bitmap StaticBitmap;
        Graphics statGr;
 
        //объявление трех цветом для прорисовки 
        Color clB, clR, clY;
 
        //объявление радиусов
        int rad1; //радиус "точек"
        int blowRad;  // радиус текущего "взрыва" вокруг точки
 
        //переменная для хранения прозрачности рисуемых объектов 
        int alpha;
 
        //центры рисуемых "точке"
        //голубые точки - первый и второй ряд
        int xb1, yb1;
        int xb2, yb2;
 
        //красные точки - первый и второй ряд
        int xr1, yr1;
        int xr2, yr2;
 
        //желтые точки - первый и второй ряд
        int xy1, yy1;
        int xy2, yy2;
 
        //переменные для контроля анимации и выбора цвета для анимации
        int animIter;
        int colorIter;
 
 
 
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        //функция, которая рисует статическую составляющую анимации
        void drawStatic()
        {
            //чёрный фон
            SolidBrush fon = new SolidBrush(Color.Black); 
            statGr.FillRectangle(fon, 0, 0, PBox1.Width, PBox1.Height);
 
            //прорисовка всех "точек" при помощи функции drawGrid
            drawGrid(xb1, yb1, xb2, yb2, clB);
            drawGrid(xr1, yr1, xr2, yy2, clR);
            drawGrid(xy1, yy1, xy2, yr2, clY);
 
        }
 
        //прорисовка фона из "точек"
        void drawGrid(int x1, int y1, int x2, int y2, Color col)
        {
            int i, j;  //переменные управляющие циклом
            int yt, xt; //переменные для хранения изменяемых координат
 
            //прорисовка первого слоя "точек" при помощи функции drawCircle
            xt = x1; // x1, y1, x2, y2 - соответственно центры "точек" 
            for (i = 0; i < 5; i++)
            {
                yt = y1;
                for (j = 0; j < 7; j++)
                {
                    drawCircle(xt, yt, col);
                    yt += 95;
                }
                xt += 165;
            }
 
            //прорисовка второго слоя
            xt = x2;
            for (i = 0; i < 5; i++)
            {
                yt = y2;
                for (j = 0; j < 7; j++)
                {
                    drawCircle(xt, yt, col);
                    yt += 95;
                }
                xt += 165;
            }
        }
 
        //функция для рисования окружности по координатам её центра 
        // (в отличии от имеющихся в C#, которые рисуют по краю прямоугольника
        void drawCircle(int x1, int y1, Color col)
        {
            //инициализация карандаша и заливки полученным цветом
            Pen p = new Pen(col);
            SolidBrush br = new SolidBrush(col);
 
            //пересчет координат прямоугольника, для вызова стандартной функции рисования 
            int x3 = x1 - rad1;
            int y3 = y1 - rad1;
 
            //рисование и заливка окружности по пересчитанным координатам
            statGr.FillEllipse(br, x3, y3, 2 * rad1, 2 * rad1);
            statGr.DrawEllipse(p, x3, y3, 2 * rad1, 2 * rad1);
 
        }
 
        //функция отвечающая за анимацию "взрыва" вокруг точек
        void drawBlow(int x1, int y1, int x2, int y2,int kn, Color col)
        {
            int i, j; // переменные управления циклом
            int yt, xt; // переменные для хранения изменяемых координат при прорисовке
 
            int width = 0; // инициализация толщины пера рисования
            blowRad = 0; // инициализация радиуса "взрыва"
 
            switch (kn) // задание соответствующих значений толщины пера 
            {           // и радиуса "взрыва" по полученному состоянию анимации _kn_
                case 1:
                    width = 7;
                    blowRad = rad1 + 5;
                    break;
                case 2:
                    width = 6;
                    blowRad = rad1 + 12;
                    break;
                case 3:
                    width = 6;
                    blowRad = rad1 + 19;
                    break;
                case 4:
                    width = 3;
                    blowRad = rad1 + 26;
                    break;
                case 5:
                    width = 2;
                    blowRad = rad1 + 30;
                    break;
                case 6:     // осуществление задержки (на один тик таймера
                    return; //  между взрывами у точек разного цвета
            }
 
            // прорисовка "взрывов" при помощи функции drawEdge 
            xt = x1;
            for (i = 0; i < 5; i++)
            {
                yt = y1;
                for (j = 0; j < 7; j++)
                {
                    drawEdge(xt, yt, width, col);
                    yt += 95;
                }
                xt += 165;
            }
 
            xt = x2;
            for (i = 0; i < 5; i++)
            {
                yt = y2;
                for (j = 0; j < 7; j++)
                {
                    drawEdge(xt, yt, width, col);
                    yt += 95;
                }
                xt += 165;
            }
 
        }
 
        // функция для прорисовки окружности ("взрыва") по полученным координатам центра
        // работает аналогично функции drawCircle. Отличие в том, что не закрашивает область внутри
        void drawEdge(int x1, int y1, int width, Color col)
        {
            Pen p = new Pen(col);
            p.Width = width;
            int x3 = x1 - blowRad;
            int y3 = y1 - blowRad;
 
            statGr.DrawEllipse(p, x3, y3, 2 * blowRad, 2 * blowRad);
 
        }
 
 
 
        // анимация начинается после клика по форме (PictureBox)
        private void PBox1_Click(object sender, EventArgs e)
        {
            Graphics gr = PBox1.CreateGraphics(); //инициализация графики
 
            alpha = 255; // установление прозрачности
 
            //инициализация цветов "точек", по параметрам Alpha и RGB 
 
            clB = Color.FromArgb(alpha, 100, 200, 220);
            clR = Color.FromArgb(alpha, 200, 75, 70);
            clY = Color.FromArgb(alpha, 240, 190, 65);
 
            // задание центров всех "точек". Соответственно первый и второй слой
            xb1 = 0; yb1 = 10;
            xb2 = 80; yb2 = 60;
 
            xr1 = 110; yr1 = 10;
            xr2 = 25; yr2 = 60;
 
            xy1 = 55; yy1 = 10;
            xy2 = 135; yy2 = 60;
 
            // задание радиуса "точек"
            rad1 = 10;
 
            //инициализация bitmap
            StaticBitmap = new Bitmap(500, 500, gr);
            // и графики для bitmap
            statGr = Graphics.FromImage(StaticBitmap);
 
           // включение сглаживания для графики
            statGr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
 
            //прорисовка статической части анимации
            drawStatic();
 
            // отображение полученного изображения в bitmap на форму
            PBox1.Image = StaticBitmap;
 
            // задание переменных  управляющих анимацией
            animIter = 0;  //состояние анимации
            colorIter = 0; //задает какую точку обрабатываем  
            timer1.Enabled = true; // включение таймера
 
 
        }
 
        //функция вызываемая при тике таймера
        private void timer1_Tick(object sender, EventArgs e)
        {
 
            animIter += 1; // переход к следующему этапу анимации
 
            drawStatic(); // прорисовка фона
 
            // проверяем текущее состояние обрабатываемой точки и
            // вызов соответствующей функции 
            if (colorIter == 1)
            {
                drawBlow(xb1, yb1, xb2, yb2, animIter, clB); // уже в функцию передаем этап анимации
            }
            if (colorIter == 2)
            {
                drawBlow(xr1, yr1, xr2, yr2, animIter, clR);
            }
            if (colorIter == 3)
            {
                drawBlow(xy1, yy1, xy2, yy2, animIter, clY);
            }
 
            //отображаем bitmap на PictureBox
            PBox1.Image = StaticBitmap;
 
            // проверяем, если прошли все этапы анимации, 
            // то переходим к следюущей точке и обнуляем этап анимации
            if (animIter >= 6)
            {
                animIter = 0;
                colorIter += 1;
            }
 
            // как только обработали все точки, то возвращаемся к первой
            if (colorIter >= 4)
                colorIter = 1;
 
 
        } 
    }
}

Прикрепленный файлРазмер
Skopinskiy_FunDots.zip58.81 кб