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

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

Построения
на плоскости (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 Waves
{
    public partial class Form1 : Form
    {
        //Число пи
        private const double pi = 3.1416;
        //Инициализация bitmap
        private Bitmap Waves;
        //Инициализация графики
        private Graphics graph;
        //Массив начальных кружков каждого ряда волн, хранящий координаты центров окружностей для вращения
        private int[,] Circles = new int[15,2]
        {
            {0,0},{30,30},{0,60},{30,90},{0,120},
            {30,150},{0,180},{30,210},{0,240},{30,270},
            {0,300},{30,330},{0,360},{25,390},{0,420}
        };
        //Массив углов кружков
        private double[] Circle_Angles = new double[15];
 
        public Form1()
        {
            InitializeComponent();
 
        }
        //Рисования кружков на рядах между первым и последним
        private void DrawCircles(int x, int y)
        {
            Pen myPen = new Pen(Color.White, 5);
            SolidBrush Circle = new SolidBrush(Color.Black);
 
            for(int i = 1; i<10; i++)
            {
               //Прорисовка всех кружков в ряду
                graph.FillEllipse(Circle, (int)x+i*60, (int)y, 60, 60);
                graph.DrawEllipse(myPen, (int)x+i*60, (int)y, 60, 60);
 
            }
            //Прорисовка кружка выходящего за пределы экрана
            graph.FillEllipse(Circle, (int)x - 60, (int)y, 60, 60);
            graph.DrawEllipse(myPen, (int)x - 60, (int)y, 60, 60);
 
        }
        //Рисование кружков в первых рядах(выходящих за пределы экрана)
        private void DrawCirclesTop(int x0, int y0)
        {
            Pen myPen = new Pen(Color.White, 5);
            SolidBrush Circle = new SolidBrush(Color.Black);
            //Пересчитывание координат и углов для кружков самого верхнего ряда
            double angle = Circle_Angles[0] - (pi / 50);
            double x = Circles[1, 0] - 30 * Math.Cos(angle);
            double y = Circles[1, 1] - 30 * Math.Sin(angle);
            //Прорисовка кружка выходящего в начале за пределы экрана
            graph.FillEllipse(Circle, (int)x, (int)y-60, 60, 60);
            graph.DrawEllipse(myPen, (int)x, (int)y-60, 60, 60);
 
            for (int i = 1; i < 10; i++)
            {
                //Прорисорвка всех кружков в ряду
                graph.FillEllipse(Circle, (int)x + i * 60, (int)y-60, 60, 60);
                graph.DrawEllipse(myPen, (int)x + i * 60, (int)y-60, 60, 60);
 
            }
            //Прорисовка началаьного кружка в ряду и перерисовка кружка рядом ниже
            graph.FillEllipse(Circle, (int)x - 60, (int)y-60, 60, 60);
            graph.DrawEllipse(myPen, (int)x - 60, (int)y-60, 60, 60);
            graph.FillEllipse(Circle, (int)x0, (int)y0, 60, 60);
            graph.DrawEllipse(myPen, (int)x0, (int)y0, 60, 60);
 
        }
        //Рисование кружков в последних рядах(выходящих за пределы экрана)
        private void DrawCirclesBottom()
        {
            Pen myPen = new Pen(Color.White, 5);
            SolidBrush Circle = new SolidBrush(Color.Black);
 
            //Пересчитывание координат и углов для кружков самого нижнего ряда
            double angle = Circle_Angles[14] + (pi / 50);
            double x = Circles[13, 0] - 30 * Math.Cos(angle);
            double y = Circles[13, 1] - 30 * Math.Sin(angle);
            //Прорисовка кружка выходящего в начале за пределы экрана
            graph.FillEllipse(Circle, (int)x - 60, (int)y + 60, 60, 60);
            graph.DrawEllipse(myPen, (int)x - 60, (int)y + 60, 60, 60);
 
            for (int i = 1; i < 10; i++)
            {
                //Отрисовка всех кружков в ряду
                graph.FillEllipse(Circle, (int)x + i * 60, (int)y + 60, 60, 60);
                graph.DrawEllipse(myPen, (int)x + i * 60, (int)y + 60, 60, 60);
 
            }
            //Отрисовка начального кружка последнего ряда
            graph.FillEllipse(Circle, (int)x, (int)y + 60, 60, 60);
            graph.DrawEllipse(myPen, (int)x, (int)y + 60, 60, 60);
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //Присваивание значений углов в начале отрисовки
            Circle_Angles[0] = 0; 
            for (int i = 1; i < 15; i++ )
            {
                Circle_Angles[i] = Circle_Angles[i - 1] + (pi / 15);
            }
            //Вызов функции таймера
            timer1.Start();
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
            //Создаем bitmap
            Waves = new Bitmap(Wavesbox.Width, Wavesbox.Height);
            //Создаем графику из bitmap
            graph = Graphics.FromImage(Waves);
            //Используем сглаживание при рисовании
            graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            Pen myPen = new Pen(Color.White, 5);
            SolidBrush Circle = new SolidBrush(Color.Black);
            //закрашиваем черным цветом фон
            graph.Clear(Color.Black);
 
            //Цикл прорисовки всех кружков
            for(int i=0; i<15; i++)
            {
                    //Пересчитывание координат для кружков
                    double x = Circles[i, 0] - 30 * Math.Cos(Circle_Angles[i]);
                    double y = Circles[i, 1] - 30 * Math.Sin(Circle_Angles[i]);
                    //Пересчитывание углов
                    Circle_Angles[i] = Circle_Angles[i] + (pi / 50);
                    //Отрисовать начальный кружок ряда
                    graph.FillEllipse(Circle, (int)x, (int)y, 60, 60);
                    graph.DrawEllipse(myPen, (int)x, (int)y, 60, 60);
                    //Если рисуем первый ряд
                    if(i==0)
                    {
                        //Рисуем сначала верхний ряд(выходящий за пределы экрана), потом ниже
                        DrawCirclesTop((int)x, (int)y );
                        DrawCircles((int)x, (int)y);
                    }
                    //Если рисуем последний ряд
                    else
                    if(i==14)
                    {
                        //Рисуем сначала предпоследний ряд, а потом нижний(выходящий за пределы экрана)
                        DrawCircles((int)x, (int)y);
                        DrawCirclesBottom();
                    }
                    //Иначе рисуем все остальные ряды
                    else
                    DrawCircles((int)x,(int)y);
            }
            //Выводим содержимое на picturebox
            Wavesbox.BackgroundImage = Waves;
        }
 
        private void Wavesbox_Click(object sender, EventArgs e)
        {
 
        }
    }
}

Прикрепленный файлРазмер
Waves.zip55.32 кб