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

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

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
 
    public partial class Form1 : Form
    {
        Bitmap myBitmap;
        Graphics g;
        Pen whP = new Pen(Color.White);
        SolidBrush fon = new SolidBrush(Color.White);//цвет фона 
        SolidBrush bl =  new SolidBrush(Color.Black); //цвет черных квадратов
        SolidBrush wh = new SolidBrush(Color.White); //цвет белых квадратов
 
        Rect[] arrR = new Rect[20]; //временные позиции точек(при повороте)
        Rect[] arrRconst = new Rect[20]; //константные позиции точек
 
        int tmp = 0; bool stop = false; // задержка перед следующим поворотом
 
        public Form1()
        {
            InitializeComponent();
        }
 
        //событие при нажатии кнопки
        private void button1_Click(object sender, EventArgs e)
        {
 
            double a = 300; // начальные положения точек квадратов
            for (int i = 0; i < 16; i++)
            {
                if (i % 2 == 0)
                {
                    a /= 2;
                    arrRconst[i] = new Rect(0, -a, -a, a, -a, a, a, -a, a);
                    arrR[i] = new Rect(0, -a, -a, a, -a, a, a, -a, a);
                }
                else
                {
                    arrRconst[i] = new Rect(1, 0, -a, a, 0, 0, a, -a, 0); //конст массив
                    arrR[i] = new Rect(1, 0, -a, a, 0, 0, a, -a, 0); // временный
                }
 
 
            }
 
            timer1.Enabled = true;
        }//end ff clic
 
        private void draw()  // функция рисования
        {
            myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//создаем битмап 
            g = Graphics.FromImage(myBitmap);//и графику  
            g.SmoothingMode = SmoothingMode.AntiAlias; // сглаживание краев
            g.FillRectangle(fon, 0, 0, 400, 400);//заливаем фон
            //смещаем начало координат в центр
            g.TranslateTransform((float)pictureBox1.Width / 2, (float)pictureBox1.Height / 2);
 
 
            Point[] points= { //координаты первого квадрата
                           new Point((int)arrR[0].x1, (int)arrR[0].y1),
                           new Point((int)arrR[0].x2, (int)arrR[0].y2), 
                           new Point((int)arrR[0].x3, (int)arrR[0].y3), 
                           new Point((int)arrR[0].x4, (int)arrR[0].y4), 
                          };
 
            //нарисовать первый квадрат по точкам
            if (arrR[0].color == 0) g.FillPolygon(bl, points);
            else g.FillPolygon(wh, points);
 
           double a = 2; //на сколько изменить позицию точки, они движутся по прямым
           for (int i = 1; i < 16; i++)
           {
               if (arrR[1].x1 < arrR[0].x2) //фигура делает поворот
               {
                   if (i % 2 != 0)
                   {
                       arrR[i].x1 += a;
                       arrR[i].y2 += a;
                       arrR[i].x3 -= a;
                       arrR[i].y4 -= a;
                   }
                   else
                   {
                       a /= 2;
                       arrR[i].x1 += a; arrR[i].y1 -= a;
                       arrR[i].x2 += a; arrR[i].y2 += a;
                       arrR[i].x3 -= a; arrR[i].y3 += a;
                       arrR[i].x4 -= a; arrR[i].y4 -= a;
                   }
               }
               else //фигура повернулась на 45 градусов
               {
                   stop = true;
                   if (arrR[0].color == 0)
                       g.DrawPolygon(whP, points);
               }
 
               Point[] points1 = { //отобразить текущий квадрат
                           new Point((int)arrR[i].x1, (int)arrR[i].y1),
                           new Point((int)arrR[i].x2, (int)arrR[i].y2), 
                           new Point((int)arrR[i].x3, (int)arrR[i].y3), 
                           new Point((int)arrR[i].x4, (int)arrR[i].y4), 
                          };
            if(arrR[i].color == 0) g.FillPolygon(bl, points1);
            else g.FillPolygon(wh, points1);
           }
 
           if (stop == true) // если фигура сделала поворот
           {
              if (tmp < 30) tmp++; // задержка
               else
               {
                   tmp = 0; stop = false;
 
                   //присвоить временному массиву значения(позиции точек) конст массива
                   //это нужно тк класс Rect(объявлен ниже) хранит точки типа double => появляется погрешность в вычислениях
                   for (int i = 0; i < 16; i++)  
                   {
                       arrR[i].x1 = arrRconst[i].x1;
                       arrR[i].x2 = arrRconst[i].x2;
                       arrR[i].x3 = arrRconst[i].x3;
                       arrR[i].x4 = arrRconst[i].x4;
                       arrR[i].y1 = arrRconst[i].y1;
                       arrR[i].y2 = arrRconst[i].y2;
                       arrR[i].y3 = arrRconst[i].y3;
                       arrR[i].y4 = arrRconst[i].y4;
 
                       arrR[i].color = 1 - arrR[i].color; //сменить цвет квадрата на противоположный
 
                   }
               }
           }
 
 
            pictureBox1.BackgroundImage = myBitmap;//отображаем Bitmap на pictureBox
        }//end ff draw
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            draw(); //вызов функции рисования
        }//end ff timer
 
}//end class Form
 
    //класс для хранения точек квадрата и "цвета" квадрата(если color = 0 => цвет черный, 1 - белый)
    public class Rect
    {
       public double x1, y1, x2, y2, x3, y3, x4, y4;
       public int color;
 
       public Rect(int color, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
        {
            this.x1 = x1; this.y1 = y1; this.x2= x2; this.y2 = y2;
            this.x3= x3; this.y3 = y3; this.x4 = x4; this.y4 = y4;
            this.color = color;
        }
    }//end class Rect
 
}//end WindowsFormsApplication1

Прикрепленный файлРазмер
WindowsFormsApplication.rar86.05 кб