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

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

Построения
на плоскости (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;
 
namespace rotating_star
{
    public partial class Form1 : Form
    {
        //Инициализация bitmap и графики
        Bitmap myBitmap;
        Graphics g;
        //Создаем объекты для закрашивания фигур
        SolidBrush black = new SolidBrush(Color.Black);
        double pi = 3.14;//число Пи
        int points = 30;//количество концов звезды
        int deltangle = 0;//угол, на который происходит смещение
        int vnrad = 30;//внешний радиус звезды, который будет меняться
        int fon = 0;//переменная для изменения цвета фона
        int col = 1;//переменная для изменения цвета звезды
        //регулирование изменения размера радиуса (size) и угла (check)
        bool size = false;
        bool check = false;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //вызываем функцию таймера
            timer1.Start();
        }
        private void pictureBox1_Click(object sender, EventArgs e)
        {
 
        }
        //функция прорисовки звезды, аргументами которой являются внешний (изменяющийся) и внутренний радиусы, центр, количество вершин звезды, цвет звезды и фона
        private void star(int R, int r, int x, int y, int amount, int angledelta, int col, int background)
        {
            //Создаем bitmap и графику из bitmap
            myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(myBitmap);
            //Сглаживание для графики
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            //зарисовка фона, каждый раз разным оттенком
            g.FillRectangle(new SolidBrush(Color.FromArgb(background, background, background)), 0, 0, 500, 500);
            //угол между радиусами, образующими сектор (чтобы вершины звезды были равноудалены друг от друга на данный угол)
            double angle = 360 / amount + angledelta;
            //к значению угла добавляем переменную angledelta, которая способствует изменению угла, а следовательно и расположению вершин
            //запускаем цикл для прорисовки звездочки
            for (int i = 0; i < amount; i++)
            {
                //координаты вершин звезды
                double x1 = 0, y1 = 0;
                //перевод угла из градусов в радианы
                double anglerad = (angle * i * pi) / 180;
                //вычисление координат для вершин с меняющимся радиусом
                y1 = R * Math.Sin(anglerad) + y;
                x1 = R * Math.Cos(anglerad) + x;
                //координаты начала звезды
                double anglerad1 = anglerad + (angle * pi) / 360;
                double y2 = r * Math.Sin(anglerad1) + y;
                double x2 = r * Math.Cos(anglerad1) + x;
                double anglerad2 = (angle * (i - 1) * pi) / 180 + (angle * pi) / 360;
                double y3 = r * Math.Sin(anglerad2) + y;
                double x3 = r * Math.Cos(anglerad2) + x;
                //прорисовываем луч звезды определенным цветом
                switch (col)
                {
                    case 1:
                        g.DrawLine(new Pen(Color.White, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.White, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
 
                    case 2:
                        g.DrawLine(new Pen(Color.Red, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Red, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 3:
                        g.DrawLine(new Pen(Color.Yellow, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Yellow, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 4:
                        g.DrawLine(new Pen(Color.Blue, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Blue, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 5:
                        g.DrawLine(new Pen(Color.Green, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Green, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 6:
                        g.DrawLine(new Pen(Color.Coral, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Coral, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 7:
                        g.DrawLine(new Pen(Color.Silver, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Silver, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 8:
                        g.DrawLine(new Pen(Color.Khaki, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Khaki, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 9:
                        g.DrawLine(new Pen(Color.Cyan, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Cyan, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                    case 10:
                        g.DrawLine(new Pen(Color.Purple, 2), (int)x1, (int)y1, (int)x2, (int)y2);
                        g.DrawLine(new Pen(Color.Purple, 2), (int)x1, (int)y1, (int)x3, (int)y3);
                        break;
                }
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            //если радиус не достиг максимального размера, то увеличиваем его, иначе уменьшаем
            if (size == false) vnrad++;
            if (size == true) vnrad--;
            //если угол не достиг максимального размера, то увеличиваем его, иначе уменьшаем
            if (check == false) deltangle++;
            if (check == true) deltangle--;
            //цвет звезды увеличиваем через каждые 5 шагов, т.е если deltangle делится на 5 без остатка
            if (deltangle % 5 == 0) col++;
            //если перебрали все 10 цветов, то возвращаемся к первому
            if (col > 10) col = 1;
            //фон изменяем с шагом два, при этом если звезда увеличивается, то фон светлеет, иначе темнеет
            if (size == false)
            {
                if (vnrad % 2 == 0) fon++;
            }
            if (size == true)
            {
                if (vnrad % 2 == 0) fon--;
            }
            //вызываем функцию прорисовки звезды
            star(vnrad, 30, this.Width / 2, this.Height / 2, points, deltangle, col, fon);
            //если мы дошли до максимального значения угла, то запомним это, чтобы затем уменьшать значение переменной deltangle
            if (deltangle == 100) check = true;
            //если значение deltangle минимально, то запомним это для последующего увеличения значения данной переменной 
            if (deltangle == 0) check = false;
            //если значение радиуса максимально, то переменной size присваиваем значение true, чтобы затем уменьшать радиус
            if (vnrad == 200) size = true;
            //если же значение радиуса минимально, то переменной size присваиваем значение false, чтобы затем увеличивать радиус
            if (vnrad == 30) size = false;
            //отображаем bitmap на PictureBox
            pictureBox1.Image = myBitmap;
        }
    }
}

Прикрепленный файлРазмер
Yakubova_Rotating_star.rar47.07 кб