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

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

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

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 demo4
{
    public partial class Form1 : Form
    {
        Bitmap myBitmap;//объявляем bitmap
        Graphics g;//и графику
        SolidBrush fil1 = new SolidBrush(Color.Yellow);//один цвет заливки будет желтый
        SolidBrush fil2 = new SolidBrush(Color.ForestGreen);//другой зеленый
 
        float x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6, x7, y7, x8, y8, x9, y9;
        //с помощью этих переменных будем прорисовывать точки на каждом из кругов
        int r1 = 42, r2 = 58, r3 = 74, r4 = 90, r5 = 106, r6 = 122, r7 = 138, r8 = 154, r9 = 170;
        //радиусы, на которых расположены точки на кругах
        float a1, a2, a3, a4, a5, a6, a7, a8;//это мы будем прибавлять к углу чтобы он увеличивался
        float angle;//угол между точками на каждом круге
        float time;//эта переменная понадобится в таймере, чтобы делать задержку между вращениями
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();//в данной функции вызвается таймер
        }
 
        private void Move()//функция изменения фигуры
        {
            myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//создаем битмап
            Graphics g = Graphics.FromImage(myBitmap);//и графику                       
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краям
            g.FillRectangle(fil1, 0, 0, 600, 600);//заливаем фон
 
            g.TranslateTransform((float)pictureBox1.Width / 2, (float)pictureBox1.Height / 2);//смещаем начало координат в центр
 
 
            g.FillEllipse(fil2, -178, -178, 356, 356);//прорисовываем первый круг, самый большой
            g.FillEllipse(fil1, -162, -162, 324, 324);//следующий по размеру, и заливаем его уже другим цветом
            g.FillEllipse(fil2, -146, -146, 292, 292);//и так далее
            g.FillEllipse(fil1, -130, -130, 260, 260);
            g.FillEllipse(fil2, -114, -114, 228, 228);
            g.FillEllipse(fil1, -98, -98, 196, 196);            
            g.FillEllipse(fil2, -82, -82, 164, 164);
            g.FillEllipse(fil1, -66, -66, 132, 132);
            g.FillEllipse(fil2, -50, -50, 100, 100);
 
 
 
            angle = 0;//обнуляем угол
            for (int i = 0; i < 16; i++)//в каждом круге будет по 16 точек
            {   
                x1 = -5 + (float)(r1 * (float)Math.Cos(angle + a8));//сначала рисуем точки на самом маленьком круге
                y1 = -5 + (float)(r1 * (float)Math.Sin(angle + a8));//изменяя перед этим изменяя х и у. прибавляем к углу переменную а, 
                                                                    //которая будет изменятся с течением времени             
                g.FillEllipse(fil1, x1, y1, 10, 10);//таким образом получаем круг из точек, которые вращаются
                x2 = -5 + (float)(r2 * (float)Math.Cos(angle + a7));//эту операцию проделываем и для других кругов
                y2 = -5 + (float)(r2 * (float)Math.Sin(angle + a7));
                g.FillEllipse(fil2, x2, y2, 10, 10);
                x3 = -5 + (float)(r3 * (float)Math.Cos(angle + a6));
                y3 = -5 + (float)(r3 * (float)Math.Sin(angle + a6));
                g.FillEllipse(fil1, x3, y3, 10, 10);
                x4 = -5 + (float)(r4 * (float)Math.Cos(angle + a5));
                y4 = -5 + (float)(r4 * (float)Math.Sin(angle + a5));
                g.FillEllipse(fil2, x4, y4, 10, 10);
                x5 = -5 + (float)(r5 * (float)Math.Cos(angle + a4));
                y5 = -5 + (float)(r5 * (float)Math.Sin(angle + a4));
                g.FillEllipse(fil1, x5, y5, 10, 10);
                x6 = -5 + (float)(r6 * (float)Math.Cos(angle + a3));
                y6 = -5 + (float)(r6 * (float)Math.Sin(angle + a3));
                g.FillEllipse(fil2, x6, y6, 10, 10);
                x7 = -5 + (float)(r7 * (float)Math.Cos(angle + a2));
                y7 = -5 + (float)(r7 * (float)Math.Sin(angle + a2));
                g.FillEllipse(fil1, x7, y7, 10, 10);
                x8 = -5 + (float)(r8 * (float)Math.Cos(angle + a1));
                y8 = -5 + (float)(r8 * (float)Math.Sin(angle + a1));
                g.FillEllipse(fil2, x8, y8, 10, 10);
                x9 = -5 + (float)(r9 * (float)Math.Cos(angle));//не будут двигаться у нас только точки на самом большом кругу
                y9 = -5 + (float)(r9 * (float)Math.Sin(angle));
                g.FillEllipse(fil1, x9, y9, 10, 10);
                angle += (float)0.392;//увеличиваем угол
            }
 
            pictureBox1.BackgroundImage = myBitmap;//и отображаем Bitmap на pictureBox
        }
 
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (time < 156.8)
            {
                a1 -= (float)0.0025;//увеличиваем приращения углов
                a2 -= (float)0.005;
                a3 -= (float)0.0075;
                a4 -= (float)0.01;
                a5 -= (float)0.0125;
                a6 -= (float)0.015;
                a7 -= (float)0.0175;
                a8 -= (float)0.02;
            }
            if (a1 >= 0.392) a1 = 0;//еcли приращение станет больше, чем один угол между двумя точками, обнуляем приращение
            if (a2 >= 0.392) a2 = 0; 
            if (a3 >= 0.392) a3 = 0;
            if (a4 >= 0.392) a4 = 0;
            if (a5 >= 0.392) a5 = 0;
            if (a6 >= 0.392) a6 = 0;
            if (a7 >= 0.392) a7 = 0;
            if (a8 >= 0.392) a8 = 0;
 
            time += (float)1.0051;//увеличиваем переменную времени
            if (time >= 170) time = 0;//и таким образом, некоторое время наши точки будут статичны, а потом снова начнут движение                
 
            Move();//в функции таймера вызываем нашу функцию прорисовки квадратов
        }
    }
}

Прикрепленный файлРазмер
KozlovaE_G&Y_dots.zip49.56 кб