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

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

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