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

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

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

using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace Speedy_Circles
{
    public partial class Form1 : Form
    {
        //Счетчик таймера
        private int time = 0;
        //Параметр изменения угла для изменения скорости вращения
        private int param = 100;
        //Радиус окружности по которой идет вращение
        private int radius = 200;
        //Радиус кружков
        private int radius_circle = 50;
        //Счетчик для изменения радиуса кружков
        private int radius_circle_iteration = 0;
        //Координаты центра кружности вращения
        private int xc = 250, yc = 250;
        //Число пи
        private const double pi = 3.1416;
        //Инициализация bitmap
        private Bitmap Circle_map;
        //Инициализация графики
        private Graphics graph;
 
        //Массив углов для вращения кружков
        private double[] Circle_Angles = new double[10];
        //Массив цветов кружков
        private Color[] clr = new Color[]
        { 
            Color.Navy, Color.Blue, Color.Cyan, Color.Green, Color.Lime,
            Color.Yellow, Color.Red, Color.Crimson, Color.DeepPink,  Color.Magenta, 
        };
 
        //Функция рисования кружков
        private void DrawCircle(int i)
        {
 
            SolidBrush Brush_circle = new SolidBrush(clr[i]);
            Pen mypen = new Pen(Color.White);
 
            //Отрисовка уржков на начальном этапе, в медленном темпе
            if(time < 30)
            {
                //Пересчитывание координат
                double x = xc - radius * Math.Cos(Circle_Angles[i]);
                double y = yc - radius * Math.Sin(Circle_Angles[i]);
                //Пересчитывание углов
                Circle_Angles[i] = Circle_Angles[i] + (pi / param);
                //Отрисовка кружков
                graph.FillEllipse(Brush_circle, (int)x, (int)y, radius_circle, radius_circle);
 
            }
            else
            //Отрисовка кружков в ускоряющемся темпе, изменение радиуса основной окружности и кружков
            if((time >= 30) && (time < 280))
            {
                //Уменьшение радиусов и увеличение скорости вращения на каждой итерации таймера
                if (i == 0)
                {
                    if (time % 2 == 0)
                    {
                        radius--;
                        radius_circle_iteration++;
                        if (radius_circle_iteration % 5 == 0)
                        {
                            radius_circle --;
                        }
                    }
                    else
                    if (param >= 10)
                    {
                        param--;
                    }
                }
                //Пересчитывание координат
                double x = xc - radius * Math.Cos(Circle_Angles[i]);
                double y = yc - radius * Math.Sin(Circle_Angles[i]);
                //Пересчитывание углов
                Circle_Angles[i] = Circle_Angles[i] + (pi / param);
                //Отрисовка кружков
                graph.FillEllipse(Brush_circle, (int)x, (int)y, radius_circle, radius_circle);
 
            }
            else
            //Вращение в эпицентре, с наибольшим темпом и наименьшимим радиусами
            if((time >= 280) && (time < 400))
            {
 
                if (param >= 10)
                {
                    param--;
                }
                //Пересчитывание координат
                double x = xc - radius * Math.Cos(Circle_Angles[i]);
                double y = yc - radius * Math.Sin(Circle_Angles[i]);
                //Пересчитывание углов
                Circle_Angles[i] = Circle_Angles[i] + (pi / param);
                //Отрисовка кружков
                graph.FillEllipse(Brush_circle, (int)x, (int)y, radius_circle, radius_circle);
 
            }
            else
            //Уменьшение темпа вращения и возращение в исходные позиции кружков
            if((time >= 400) && (time <= 650))
            {
                //Увеличение радиусов и уменьшение скорости вращения на каждой итерации таймера
                if (i == 0)
                {
                    if (time % 2 == 0)
                    {
                        radius++;
                        radius_circle_iteration++;
                        if (radius_circle_iteration % 5 == 0)
                        {
                            radius_circle++;
                         }
 
                    }
                    if (time > 450)
                    {
 
                        if ((time % 3 == 0) && (param <= 140))
                        {
                            param++;
                        }
                    }
                }
 
                //Пересчитывание координат
                double x = xc - radius * Math.Cos(Circle_Angles[i]);
                double y = yc - radius * Math.Sin(Circle_Angles[i]);
                //Пересчитывание углов
                Circle_Angles[i] = Circle_Angles[i] + (pi / param);
                //Отрисовка кружков
                graph.FillEllipse(Brush_circle, (int)x, (int)y, radius_circle, radius_circle);
 
                if(time==650)
                {
                    //На последней итерации возвращаем все данные на исходные позиции
                    time = 0;
                    param = 100;
                    radius = 200;
                    radius_circle = 50;
                }
 
            }
 
        }
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //Присваивание значений углов на старте отрисовки
            Circle_Angles[0] = 0;
            for (int i = 1; i < 10; i++)
            {
                Circle_Angles[i] = Circle_Angles[i - 1] + (pi / 5);
            }
            //Вызов функции таймера
            timer1.Start();
        }
 
        private void Picture_Circles_Click(object sender, EventArgs e)
        {
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
            //Создаем bitmap
            Circle_map = new Bitmap(Picture_Circles.Width, Picture_Circles.Height);
            //Создаем графику из bitmap
            graph = Graphics.FromImage(Circle_map);
            //Используем сглаживание при рисовании
            graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            //закрашиваем черным цветом фон
            graph.Clear(Color.Black);
 
            //Цикл прорисовки кружков
            for (int i = 0; i < 10; i++)
            {
                DrawCircle(i); //Функция прорисовки кружков
            }
 
           //Выводим содержимое на picturebox
           Picture_Circles.BackgroundImage = Circle_map;
           time++;//Увеличиваем счетчик таймера
        }
 
    }
}

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