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

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

Построения
на плоскости (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 Яндекс.Метрика
Язык программирования: 
C#
Среда программирования: 
Visual Studio C#

Вариант 1

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 Shuffle
{
    public partial class Form1 : Form
    {
        //объявление переменных
 
        //битмап, графика и заливка
        Bitmap B;
        Graphics G;
 
        SolidBrush bl, wh;
        SolidBrush fon1, fon2;
 
        //текущее состояние анимации
        int condidtion;
        int tick;
 
        //координаты кругов и радуиус
        int x;
        int y1;
        int y2;
        int animY;
        int rad;
 
        //функция прорисовки фона, которая рисует его в зависимот от состояния
        void Draw(int cnd)
        {
            //прорисовка самого фона
            G.FillRectangle(fon1, 0, 0, pictureBox1.Width, pictureBox1.Height);
            G.FillRectangle(fon2, 130, 20, 260, 460);
 
            //задание координат кругов
            x = 190;
            y1 = 60;
            y2 = 320;
 
            //в зависимости от состояния рисует либо белые, либо черные круги
            if (cnd == 1)
            {
                G.FillEllipse(bl, x, y1, rad, rad);
                G.FillEllipse(bl, x, y2, rad, rad);
            }
 
            else
            {
                G.FillEllipse(wh, x, y1, rad, rad);
                G.FillEllipse(wh, x, y2, rad, rad);
            }
        }
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //инициализация битмап, графику
            B = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            G = Graphics.FromImage(B);
            //включение сглаживания
            G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
            //присаиваются цвета заливки фона и кругов
            fon1 = new SolidBrush(Color.Silver);
            fon2 = new SolidBrush(Color.DimGray);
 
            bl = new SolidBrush(Color.Black);
            wh = new SolidBrush(Color.White);
 
            //задается радиус
            rad = 140;
 
            //первая прорисовка фона
            Draw(1);
 
            //инициализация вспомогательных переменых анимации
            tick = 0;
            condidtion = 1;
 
            //запуск таймера
            timer1.Enabled = true;
 
            //вывод битмапа на экран
            pictureBox1.Image = B;
 
 
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            //в зависимости от состояния прорисовывает либо белый падающий круг, либо чёрный
            if (condidtion == 1)
            {
                if (tick == 0)
                {
                    //если цикл запустился первый раз, то рисуем круг на месте старта
                    G.FillEllipse(wh, x, y1, rad, rad);
                    //увеличивается тик счетчика
                    tick += 10;
                    //и задается начальная координата анимации
                    animY = y1;
                }
                else if (tick <= 260)
                {
                    //пока не прошли нужное расстояние
                    //увеличивается счетчик и приращается координата
                    animY += 5;
                    tick += 5;
                    //рисуется фон
                    Draw(condidtion);
                    //рисуется "падающий" круг
                    G.FillEllipse(wh, x, animY, rad, rad);
                }
                else{
                    //иначе, если круг дошел до места
                    //меняем состояние
                    condidtion = 2;
                    tick = 0;
                }
            }
 
                //аналогично первой части
            else if (condidtion == 2)
            {
                if (tick == 0)
                {
                    G.FillEllipse(bl, x, y1, rad, rad);
                    tick += 10;
                    animY = y1;
                }
                else if (tick <= 260)
                {
                    animY += 5;
                    tick += 5;
                    Draw(condidtion);
                    G.FillEllipse(bl, x, animY, rad, rad);
                }
                else
                {
                    condidtion = 1;
                    tick = 0;
                }
            }
 
            //изображение выводится на экран
            pictureBox1.Image = B;
 
        }
    }
}

Вариант 2

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //Инициализация bitmap и графики
        Bitmap bmp;
        Graphics g;
        Point p1 = Point.Empty;
        Point p2 = Point.Empty;
 
        int y = 20;
        bool k = false;//отвечает за цвет заливки выпадающего круга
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();//вызываем функцию таймера
        }
 
        private void mydraw(int y, bool key)
        {
            //Создаем объекты для закрашивания фигур
        SolidBrush black = new SolidBrush(Color.Black);
        SolidBrush white = new SolidBrush(Color.White);
        SolidBrush gray = new SolidBrush(Color.Gray);
        Size s = Size.Empty;//размер круга
 
        //Создаем bitmap и графику из bitmap
            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(bmp);
            //инициализация переменных
            s.Width = 200;
            s.Height = 200;
            p1.X = pictureBox1.Width / 2 - s.Width / 2;
            p1.Y = 20;
            p2.X = p1.X;
            p2.Y = p1.Y + 350;
            //заливка фона
            g.FillRectangle(gray, 0, 0, pictureBox1.Width, pictureBox1.Height);
 
            //рисование фигур
            if (key)
            {
                g.FillEllipse(white, p1.X, p1.Y, s.Width, s.Height);
                g.FillEllipse(white, p2.X, p2.Y, s.Width, s.Height);
                g.FillEllipse(black, p1.X, y, s.Width, s.Height);//падающий круг
            }
            else
            {
                g.FillEllipse(black, p1.X, p1.Y, s.Width, s.Height);
                g.FillEllipse(black, p2.X, p2.Y, s.Width, s.Height);
                g.FillEllipse(white, p1.X, y, s.Width, s.Height);//падающий круг
            }
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
            y++;//падение круга
            if (y == p2.Y) { 
                y = p1.Y;//возвращение на исходную позицию
                //изменение параметра
                if (k) k = false;
                else k = true;
            }
            mydraw(y,k);// вызов прорисовки
            pictureBox1.Image = bmp;//отображаем bitmap на PictureBox
        }
    }
}

Прикрепленный файлРазмер
Вариант 1 (Архипцев)86.41 кб
Вариант 2 (Шерфединов)5.47 кб