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

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

Построения
на плоскости (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#
Среда программирования: 
Microsoft Visual Studio 2013

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 Rotating_Polygons
{
    public partial class Form1 : Form
    {
        SolidBrush bgcol = new SolidBrush(Color.White);//цвет фона 
 
        int cnt1 = 0; //счетчик таймера
        float speedA = 0; //переменная скорости вращения для каждого многоугольника
        float speedB = 0;
        float speedC = 0;
        float speedD = 0;
        float speedE = 0;
        float speedF = 0;
        float speedG = 0;
        float speedH = 0;
        float speedI = 0;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
 
        private void SetPolygon(PointF center, int vertexes, float radius, Graphics graphics, Bitmap bmp, float speed) // создаем функцию, которая рисует многоугольник с заданным кол-вом вершин по радиусу описанной окружности и координатам центра окружности
        {
            var angle = Math.PI * 2 / vertexes; //угол правильного многоугольника вычисляется по формуле 2*pi/(кол-во вершин)
            var points = Enumerable.Range(0, vertexes).Select(i => PointF.Add(center, new SizeF((float)Math.Sin(i * angle) * radius, (float)Math.Cos(i * angle) * radius)));//создаем массив точек, по которым будем строить многоугольник
            SolidBrush transparent = new SolidBrush(Color.FromArgb(30, 255, 0, 0));//задаем полупрозрачную заливку
 
            graphics.TranslateTransform((float)pictureBox1.Width / 2, (float)pictureBox1.Height / 2);//смещаем начало координат в центр pictureBox
            graphics.RotateTransform(speed);//поворачиваем графику на определенный угол
            graphics.FillPolygon(transparent, points.ToArray()); //заполняем многоугольник
        }
 
        private void RotatingFigures()
        {
            Bitmap btmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics a = Graphics.FromImage(btmp); //для каждой фигуры создаем графику
            Graphics b = Graphics.FromImage(btmp);
            Graphics c = Graphics.FromImage(btmp);
            Graphics d = Graphics.FromImage(btmp);
            Graphics e = Graphics.FromImage(btmp);
            Graphics f = Graphics.FromImage(btmp);
            Graphics g = Graphics.FromImage(btmp);
            Graphics h = Graphics.FromImage(btmp);
            Graphics i = Graphics.FromImage(btmp);
 
            g.FillRectangle(bgcol, 0, 0, 500, 500);//заливаем фон
 
            SetPolygon(new PointF(0, 0), 3, 20, a, btmp, speedA); //рисуем фигуры
            SetPolygon(new PointF(0, 0), 4, 45, b, btmp, speedB);
            SetPolygon(new PointF(0, 0), 5, 70, c, btmp, speedC);
            SetPolygon(new PointF(0, 0), 6, 95, d, btmp, speedD);
            SetPolygon(new PointF(0, 0), 7, 120, e, btmp, speedE);
            SetPolygon(new PointF(0, 0), 8, 145, f, btmp, speedF);
            SetPolygon(new PointF(0, 0), 9, 170, g, btmp, speedG);
            SetPolygon(new PointF(0, 0), 10, 195, h, btmp, speedH);
            SetPolygon(new PointF(0, 0), 11, 220, i, btmp, speedI);
 
            pictureBox1.BackgroundImage = btmp; //переносим рисунок из буфера на pictureBox
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            cnt1++;//увеличиваем счетчик
 
            speedA += (float)1.1;            //увеличиваем угол вращения с каждым шагом (для каждой фигуры разный)
            speedB += (float)1;
            speedC += (float)0.9;
            speedD += (float)0.8;
            speedE += (float)0.7;
            speedF += (float)0.6;
            speedG += (float)0.5;
            speedH += (float)0.4;
            speedI += (float)0.3;
 
            if (cnt1 == 3600) { cnt1 = 0; speedA = 0; speedB = 0; speedC = 0; speedD = 0; speedE = 0; speedF = 0; speedG = 0; speedH = 0; speedI = 0; }//по завершении анимации обнуляем значения переменных
 
            RotatingFigures(); //вызываем функцию рисования фигур
        }
    }
}

Прикрепленный файлРазмер
Garvilenko_Rotating_Polygons.rar36.09 кб