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

Вход на сайт

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

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