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

Вход на сайт

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

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

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

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

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

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



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;
 
namespace demo3
{
    public partial class Form1 : Form
    {
        Bitmap myBitmap;//объявляем bitmap
        Graphics g;//и графику
        SolidBrush fon = new SolidBrush(Color.DeepSkyBlue);//цвет фона будет голубым
        SolidBrush fil1 = new SolidBrush(Color.BlueViolet);//цвет заливки одних квадратов будет фиолетовым
        SolidBrush fil2 = new SolidBrush(Color.Black);//других будет черным
 
        int perem;// введем переменную, она с ходом таймера будет изменяться, 
        //и в зависимости от присвоенного ей значение будет выполняться определенный тип перемещения квадратов
 
        int k;//на это значение мы будем изменять координаты
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();//в данной функции вызвается таймер
        }
        private void Squares()//функция изменения фигуры
        {
            myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//создаем битмап
            Graphics g = Graphics.FromImage(myBitmap);//и графику                       
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краям
            g.FillRectangle(fon, 0, 0, 600, 600);//заливаем фон
 
 
            if (perem == 0)//если переменная равна нулю
            {
                for (int i = 0; i < 750; i += 70)
                {
                    for (int j = 0; j < 750; j += 70)//мы рисуем массив квадратов, таких что
                    {
                        g.FillRectangle(fil1, -65 + i + k, -65 + j, 30, 30);//одни квадраты будут фиолетовые и будут изменять иксовую координату, двигаясь вправо
                        g.FillRectangle(fil2, -30 + i + k, -65 + j, 30, 30);//квадраты другого цвета будут так же двигаться вправо
                        g.FillRectangle(fil1, -30 + i - k, -30 + j, 30, 30);//в других строках фиолетовые будут перемещаться влево
                        g.FillRectangle(fil2, -65 + i - k, -30 + j, 30, 30);//и черные тоже влево
                    }
                }
                k+=2;//переменную смещения увеличиваем на двойку
                if (k >= 35)//и когда квадраты завершат первый цикл(для этого достаточно 17 смещений)
                {
                    k = 0;//мы обнуляем к
                    perem = 1;// и переменной присваиваем новое значение, чтоб она выполнился следующий цикл
 
                }
            }            
 
            if (perem == 1)//здесь все аналогично, только теперь мы будем смещать полосы по вертикали 
            {
 
                for (int i = 0; i < 750; i += 70)
                {
                    for (int j = 0; j < 750; j += 70)
                    {
                        g.FillRectangle(fil1, -30 + i, -65 + j + k, 30, 30);// одни столбцы вниз
                        g.FillRectangle(fil2, -30 + i, -30 + j + k, 30, 30);
                        g.FillRectangle(fil1, -65 + i, -30 + j - k, 30, 30);//другие вверх
                        g.FillRectangle(fil2, -65 + i, -65 + j - k, 30, 30);
                    }
                }
                k+=2;
                if (k >= 35)//когда смести квадраты на один
                {
                    k = 0;//снова обнуляем
                    perem = 2;//и присваиваем переменной новое значение                    
                }
            }
 
            if (perem == 2)//аналогично
            {
 
                for (int i = 0; i < 750; i += 70)
                {
                    for (int j = 0; j < 750; j += 70)// смещаем ряды квадратов горизонтально, только на этот раз так
                    {
                        g.FillRectangle(fil1, -30 + i - k, -30 + j, 30, 30);//чтоб те ряды, которые в первом цикле перемещались вправо
                        g.FillRectangle(fil2, -65 + i - k, -30 + j, 30, 30);//теперь перемещались влево
                        g.FillRectangle(fil1, -65 + i + k, -65 + j, 30, 30);//а другие - вправо
                        g.FillRectangle(fil2, -30 + i + k, -65 + j, 30, 30);
                    }
                }
                k+=2;
                if (k >= 35)
                {
                    k = 0;//опять обнуляем
                    perem = 3;// и присваиваем новое значение    
                }
            }
 
            if (perem == 3)
            {
 
                for (int i = 0; i < 750; i += 70)
                {
                    for (int j = 0; j < 750; j += 70)
                    {
                        g.FillRectangle(fil1, -65 + i, -30 + j - k, 30, 30);//те ряды, которые во втором цикле перемещались вниз
                        g.FillRectangle(fil2, -65 + i, -65 + j - k, 30, 30);//теперь будут двигаться вверх
                        g.FillRectangle(fil1, -30 + i, -65 + j + k, 30, 30);// а остальные - вверх
                        g.FillRectangle(fil2, -30 + i, -30 + j + k, 30, 30);
                    }
                }
                k+=2;
                if (k >= 35)
                {
                    k = 0;//обнуляем
                    perem = 0;//таким образом цикл завершился и каждый из квадратиков прошел 
                    //по квадратной(простите за тавтологию) траектории, и переместился в исходное положение. 
                    //мы снова присваиваем переменной 0, чтоб квадратики заново начали движение по необходимой траектории
                }
            } 
 
            pictureBox1.BackgroundImage = myBitmap;//и отображаем Bitmap на pictureBox
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Squares();//в функции таймера вызываем нашу функцию прорисовки квадратов
        }
 
    }
}

Прикрепленный файлРазмер
KozlovaE_Marching_squares.zip43.39 кб