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

Вход на сайт

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

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

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

Не работает, выводит это: Process terminated with status 4258096 (0 minute(s), 2 second(s)) при этом открывается консоль с тем же числом
А как можно добавить сюда глубину рекурсии, то есть сложность линии?

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

Рейтинг@Mail.ru Яндекс.Метрика
Среда программирования: 
Visual Studio 2010

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //Инициализация bitmap и графики
        private Bitmap Splittindisk;
        private Graphics g;
        //Создаем объекты для закрашивания фигур
        SolidBrush black = new SolidBrush(Color.Black);
        SolidBrush white = new SolidBrush(Color.White);
        Pen blackpen = new Pen(Color.Black, 1);
        //определяем положение полуокружности
        int x = 0, y = 190;
        //смещение по y для прорисовки полос на разных уровнях
        int deltay = 44;
        //шаг смещения по x
        int speed = 0;
        //диаметр окружности
        int d = 50;
        //радиальные линии, образующие сектор (в нашем случае полуокружность)
        int angle1 = 0;
        int angle2 = 180;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //вызываем функцию таймера
            timer1.Start();
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
 
        }
        //функция для рисования движущихся полос
        private void Draw(int speed)
        {
            //Создаем bitmap и графику из bitmap
            Splittindisk = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage(Splittindisk);
            //Сглаживание для графики
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
            //прорисовка центральной полоски, которая не двигается; для этого в цикле рисуем полуокружности
            for (int i = -50; i < 50; i++)
            {
                //прорисовка нижней полуокружности
                g.FillPie(black, x + d * i, y, d, d, angle1, angle2);
                g.DrawPie(blackpen, x + d * i, y, d, d, angle1, angle2);
                //прорисовка верхней полуокружности
                g.FillPie(black, x + d * i + d / 2, y + deltay, d, d, angle2, angle2);
                g.DrawPie(blackpen, x + d * i + d / 2, y + deltay, d, d, angle2, angle2);
            }
            //теперь рисуем такие же полосы ниже и выше неподвижной полосы
            for (int k = 1; k <= 5; k++)
            {
                //нечетные полосы дополнительно будем смещать, чтобы полуокружности из разных уровней совпадали в одну окружность
                int shift = 0;
                if (k % 2 != 0) shift = 1;
                //смещение каждой полосы происходит на диаметр относительно предыдущего уровня
                //рисование полосы, которая находится выше неподвижной. верхние полосы двигаются влево
                for (int i = -50; i < 50; i++)
                {
                    g.FillPie(black, x + d * i - (d/2) * shift - speed * k, y - deltay * k, d, d, angle1, angle2);
                    g.DrawPie(blackpen, x + d * i - (d/2) * shift - speed * k, y - deltay * k, d, d, angle1, angle2);
                    g.FillPie(black, x + d * i - (d/2) * shift + d / 2 - speed * k, y - deltay * (k - 1), d, d, angle2, angle2);
                    g.DrawPie(blackpen, x + d * i - (d / 2) * shift + d / 2 - speed * k, y - deltay * (k - 1), d, d, angle2, angle2);
                }
                //рисование полосы, которая находится ниже неподвижной. нижние полосы двигаются вправо
                for (int i = -50; i < 50; i++)
                {
                    g.FillPie(black, x + d * i + (d / 2) * shift + speed * k, y + deltay * k, d, d, angle1, angle2);
                    g.DrawPie(blackpen, x + d * i + (d / 2) * shift + speed * k, y + deltay * k, d, d, angle1, angle2);
                    g.FillPie(black, x + d * i + (d / 2) * shift + d / 2 + speed * k, y + deltay * (k + 1), d, d, angle2, angle2);
                    g.DrawPie(blackpen, x + d * i + (d / 2) * shift + d / 2 + speed * k, y + deltay * (k + 1), d, d, angle2, angle2);
                }
            }
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            //Создаем bitmap и графику из bitmap
            Splittindisk = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage(Splittindisk);
            //Сглаживание для графики
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
            //заливка фона белым цветом
            g.FillRectangle(white, 0, 0, pictureBox1.Width, pictureBox1.Height);
            //увеличиваем шаг
            speed+=2;
            //если шаг смещения равен диаметру, то полуокружности совпали в окружность. задержим их в таком положении и обнулим шаг
            if (speed == d)
            {
                speed = 0;
                Thread.Sleep(700);
            }
            //вызываем функцию прорисовки с заданным шагом
            Draw(speed);
            //отображаем bitmap на PictureBox
            pictureBox1.BackgroundImage = Splittindisk;
        }
    }
 
}

Прикрепленный файлРазмер
Yakubova_Splittin_disks.rar76.9 кб