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

Вход на сайт

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

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

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

Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

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

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
C#
Среда программирования: 
Microsoft Visual Studio Community

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace gif
{
    public partial class Form1 : Form
    {
        SolidBrush bgcol = new SolidBrush(Color.White);//цвет фона
        SolidBrush white = new SolidBrush(Color.White); //определяем
        SolidBrush black = new SolidBrush(Color.Black);//цвета для кругов
 
        int sd; //счетчик
        int i1 = 0; //переменные для движения кругов
        int i2 = 0;
        int i3 = 0;
        int i4 = 0;
 
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start(); //при загрузке формы стартует таймер
        }
        private void DrawEll1(Graphics gr, Bitmap bmp) //определяем функции для четырех промежуточных состояний DrawEll
        {
            gr.FillEllipse(black, 0, 0, 50, 50);
            gr.FillEllipse(white, 50, 0, 50, 50);
            gr.FillEllipse(white, 0, 50, 50, 50);
            gr.FillEllipse(black, 50, 50, 50, 50);
        }
        private void DrawEll2(Graphics gr, Bitmap bmp)
        {
            gr.FillEllipse(white, 0, 0, 50, 50);
            gr.FillEllipse(black, 50, 0, 50, 50);
            gr.FillEllipse(white, 0, 50, 50, 50);
            gr.FillEllipse(black, 50, 50, 50, 50);
        }
        private void DrawEll3(Graphics gr, Bitmap bmp)
        {
            gr.FillEllipse(white, 0, 0, 50, 50);
            gr.FillEllipse(black, 50, 0, 50, 50);
            gr.FillEllipse(black, 0, 50, 50, 50);
            gr.FillEllipse(white, 50, 50, 50, 50);
        }
         private void DrawEll4(Graphics gr, Bitmap bmp) 
        {
            gr.FillEllipse(black, 0, 0, 50, 50);
            gr.FillEllipse(black, 50, 0, 50, 50);
            gr.FillEllipse(white, 0, 50, 50, 50);
            gr.FillEllipse(white, 50, 50, 50, 50);
        }
        private void MoveEll() //функция для движения кругов
        {
            Bitmap b = new Bitmap(100, 100); //создаем битмап
            Graphics g = Graphics.FromImage(b); //создаем графику
            g.FillRectangle(bgcol, 0, 0, 500, 500);//заливаем фон
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краям
 
            if (sd < 51) //определяем движение кругов при разных значениях счетчика анимации 
            {
                DrawEll1(g, b);
                g.FillEllipse(white, -50 + i1, 0, 50, 50);
                g.FillEllipse(black, i1, 0, 50, 50);
            }
 
            if (sd >= 51 && sd < 65) //по окончании одного из четырех циклов делаем перерыв и рисуем промежуточный расклад кругов
            { DrawEll2(g, b); }
 
            if (sd >= 65 && sd < 116) // определяем движение кругов при разных значениях счетчика анимации 
            {
                DrawEll2(g, b);
                g.FillEllipse(black, 50 - i2, 50, 50, 50);
                g.FillEllipse(white, 100 - i2, 50, 50, 50);
            }
 
            if (sd >= 116 && sd < 130) // по окончании одного из четырех циклов делаем перерыв и рисуем промежуточный расклад кругов
            { DrawEll3(g, b); }
 
            if (sd >= 130 && sd < 181) // определяем движение кругов при разных значениях счетчика анимации 
            {
                DrawEll3(g, b);
                g.FillEllipse(black, 0, 50 - i3, 50, 50);
                g.FillEllipse(white, 0, 100 - i3, 50, 50);
            }
 
            if (sd >= 181 && sd < 195) // по окончании одного из четырех циклов делаем перерыв и рисуем промежуточный расклад кругов
            { DrawEll4(g, b); }
 
            if (sd >= 195 && sd < 246) // определяем движение кругов при разных значениях счетчика анимации 
            {
                DrawEll4(g, b);
                g.FillEllipse(black, 50, 0 + i4, 50, 50);
                g.FillEllipse(white, 50, -50 + i4, 50, 50);
            }
 
            if (sd >= 246) // (2)
            { DrawEll1(g, b); }
 
            pictureBox1.BackgroundImage = b; //отображаем битмап на pictureBox
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            sd++; //увеличиваем счетчик
            //gr.FillRectangle(bgcol, 0, 0, 500, 500);//заливаем фон
 
 
            if (sd < 51) //пока счетчик < 51
            {
                i1 += 1; //верхний левый круг движется вправо
            }
            if (sd >= 65 && sd < 116)
            {
                i2 += 1; //нижний правый круг движется влево
            }
            if (sd >= 130 && sd < 181)
            {
                i3 += 1; //нижний левый круг движется вверх
            }
            if (sd >= 195 && sd < 246)
            {
                i4 += 1; //верхний правый круг движетсят вниз
            }
 
            if (sd == 260) { sd = 0; i4 = 0; i1 = 0; i2 = 0; i3 = 0; } //обнуляем все счетчики
            MoveEll(); //вызываем функцию движения кругов
        }
    }
}