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

Вход на сайт

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

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

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

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

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

Рейтинг@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 кб