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

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

Построения
на плоскости (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 Dots_Rotation
{
    public partial class Form1 : Form
    {
        //Проверка на отрисовку точек в первый раз
        private int First_Time = 1;
        //Число пи
        private const double pi = 3.14;
 
        //Инициализация bitmap
        private Bitmap Circle_map;
        //Инициализация графики
        private Graphics g;
 
        public Form1()
        {
 
            InitializeComponent();
        }
 
        //Массив точек, с начальными значениями
        //{радиус точки, количество итераций ожидания изменения радиуса точки(необходимо в дальнейшем), изменение радиуса(0-уменьшение точки, 1-увеличение точки)}
        private int[,] Dots = new int[12, 3]
        {  
            {40,3,0}, {40,2,0}, {40,1,0}, {36,0,1}, {32,0,1}, {28,0,1},
            {24,0,1}, {20,0,1}, {16,0,1}, {12,3,1}, {12,2,1}, {12,1,1},
        };
        //Массив углов точек
        private double[] Dots_Angle = new double[12];
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
 
        }
 
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            //Создаем bitmap
            Circle_map = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            //Создаем графику из bitmap
            g = Graphics.FromImage(Circle_map);
            //Используем сглаживание при рисовании
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            //закрашиваем черным цветом фон
            //Graphics g = pictureBox1.CreateGraphics();
            SolidBrush Dot = new SolidBrush(Color.Red);
            g.Clear(Color.Black);//закрашивание экрана
 
            //Отрисовка точек первый раз
            if(First_Time==1)
            {
                for (int i = 0; i < 12; i++ )
                {
                    Dots_Angle[i] = 0;
                }
                 //Нахождение координат первой точки
                 double x = 200 + 100 * Math.Cos(Dots_Angle[0]);
                 double y = 150 - 100 * Math.Sin(Dots_Angle[0]);
 
                 //Отрисовка точки
                 g.FillEllipse(Dot, (int)x, (int)y, Dots[0, 0], Dots[0, 0]);
 
                //Нахождение и отрисовка остальных точек
                 for (int i = 1; i < 12; i++)
                 {
                    Dots_Angle[i] = Dots_Angle[i - 1] + (pi / 6);
                    x = 170 + 100 * Math.Cos(Dots_Angle[i]);
                    y = 100 - 100 * Math.Sin(Dots_Angle[i]);
                    g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]);
                }
                 First_Time = 0;
            }
            //Если отрисовка происходит не в первый раз
            else
            {
 
              //Цикл по каждой точке
              for (int i = 0; i < 12; i++)
              {
                  //Пересчитывание координат точки
                 Dots_Angle[i] = Dots_Angle[i] + (pi/200);
                 double x = 170 + 100 * Math.Cos(Dots_Angle[i]);
                 double y = 120 - 100 * Math.Sin(Dots_Angle[i]);
 
                 //Если радиус точки наибольший(по умолчанию - 40)
                 if (Dots[i, 0] == 40)
                 {
                    //Если количество итераций ожидания равен 3, то уменьшаем радиус точки и отрисовываем
                    if (Dots[i, 1] == 3)
                    {
                        Dots[i, 0] = Dots[i, 0] - 4;
                        g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]);
                        Dots[i, 1] = 0;
                        Dots[i, 2] = 0;
                        continue;
                    }
                    //Иначе, отрисовываем точку с тем же радиусом что и был, только с другими координатами
                    else
                        if (Dots[i, 0] == 40 && Dots[i, 1] != 3)
                        {
                            g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i,0]);
                            Dots[i, 1]++;
                            continue;
                        }
                 }
 
                 //Если радиус точки наименьший(по умолчанию - 12)
                 if (Dots[i, 0] == 12)
                 {
                     //Если количество итераций ожидания равен 3, то увеличиваем радиус точки и отрисовываем
                    if (Dots[i, 1] == 3)
                    {
                        Dots[i,0] = Dots[i, 0] + 4;
                        g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]);
                        Dots[i, 1] = 0;
                        Dots[i, 2] = 1;
                        continue;
                    }
                    //Иначе, отрисовываем точку с тем же радиусом что и был, только с другими координатами
                    else
                        if (Dots[i, 0] == 12 && Dots[i, 1] != 3)
                        {
                            g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]);
                            Dots[i, 1]++;
                            continue;
                        }
                 }
                 //Если радиус точки находится между наибольшим и наименьшим радиусом, и коэффициент изменения радиуса равен 1, то увеличиваем радиус и отрисовываем точку
                 if (Dots[i, 0] != 40 && Dots[i, 0] != 12 && Dots[i, 2] == 1)
                 {
                    Dots[i, 0] = Dots[i, 0] + 4;
                    g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]);
                    if (Dots[i, 0] == 40)
                    {
                        Dots[i, 2] = 0;
                    }
                    continue;
                 }
                 //Если радиус точки находится между наибольшим и наименьшим радиусом, и коэффициент изменения радиуса равен 0, то уменьшаем радиус и отрисовываем точку
                 if (Dots[i, 0] != 40 && Dots[i, 0] != 12 && Dots[i, 2] == 0)
                 {
                    Dots[i, 0] = Dots[i, 0] - 4;
                    g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]);
                    if (Dots[i, 0] == 12)
                    {
                        Dots[i, 2] = 1;
                    }
                    continue;
                 }
 
              }
          }
            pictureBox1.BackgroundImage = Circle_map;
       }
    }
}

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