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

Вход на сайт

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

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

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

Не работает, выводит это: Process terminated with status 4258096 (0 minute(s), 2 second(s)) при этом открывается консоль с тем же числом
А как можно добавить сюда глубину рекурсии, то есть сложность линии?
ошибка : пишет не удается открыть источник файл "SDL.h" Из за этой ошибки не удается запустить программу хотя я все сделал правильно , в результате код не работает : //подключим SDL и stdio #include #include //Некоторые константы нашего окна const...
Чет не работает, помогите, надо очень сильно
добрый день! при попытке компиляции выдает Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPointSize" 1>Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPopMatrix" 1>Source.obj : error LNK2001: неразрешенный...

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

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