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

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

Построения
на плоскости (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

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace DemoScene
{
    public partial class Form1 : Form
    {
        // Объявление переменных:
        int h, w;           // Высота, ширина рабочей области
        Random r;           // Элемента класса случайных чисел
        Pen myPen;          // Ручка
        List<pointz> dots;  // Массив элементов создаваемого класса
        pointz Temp;        // Буферный элемент
        Graphics g;
        Bitmap bm;
        private void timer1_Tick(object sender, EventArgs e)
        {
            bm = new Bitmap(w, h);      // Создание битмапа по размерам рабочей области
            g = Graphics.FromImage(bm); // Связь между графикой и битмапом.
            PointsPP();                 // Движение и увеличение объектов.
            for (int i = 0; i < dots.Count; i++)
            {
                if (dots[i].GetX() > 0 && dots[i].GetY() > 0 && dots[i].GetX() < w && dots[i].GetY() < h)
                {                           // Если объект внутри рабочей области - отрисовка объекта.
                    myPen.Color = dots[i].GetColor();
                    myPen.Width = dots[i].GetSize();
                    g.DrawEllipse(myPen, dots[i].GetX(), dots[i].GetY(), myPen.Width, myPen.Width);
                }
                else dots.Remove(dots[i]);  // Иначе - удалить объект из списка.
            }
            // Отрисовка сетки:
            myPen = new Pen(Color.Black, 1);
            for (int i = 0; i <= w / 50; i++)
            {
                g.DrawLine(myPen, i * 50, 0, i * 50, h - 1);
            }
            for (int i = 0; i <= h / 50; i++)
            {
                g.DrawLine(myPen, 0, i * 50, w - 1, i * 50);
            }
            pictureBox1.Image = bm; // Вывод битмапа в рабочуу область.
            if (dots.Count == 0) timer1.Enabled = false; // Если в списке закончились
                                                         // объекты - выключить таймер.
        }
        public Form1()
        {   // Инициализация всех компонентов при старте:
            InitializeComponent();
            dots = new List<pointz>();
            r = new Random();
            w = pictureBox1.Width;
            h = pictureBox1.Height;
        }
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            timer1.Enabled = true;  // Включение таймера.
            // Создание, инициализация объектов случайного цвета, добавление в список.
            int PointX = e.X, PointY = e.Y;
            Color RandColor = RandCol();
            for (int i = 1; i <= 4; i++)
            {
                Temp = new pointz(PointX, PointY, i, RandColor, 4);
                dots.Add(Temp);
            }
            myPen = new Pen(Color.Purple, 3);
        }
        Color RandCol() // Генерация случайного цвета.
        {   
            Color outCol = new Color();
            outCol = Color.FromArgb(65535 * r.Next(40000, 50000) + r.Next(1, 16777216));
            return outCol; // Возвращение случайного цвета.
        }
        void PointsPP()
        {
            for (int i = 0; i < dots.Count; i++)
            {
                if ((dots[i].GetX() % 50 == 0 && dots[i].GetNapr() > 2) || (dots[i].GetY() % 50 == 0) && dots[i].GetNapr() < 3)
                    dots[i].SetSize(dots[i].GetSize() + 3); // увеличение "точки" при прохождении через решетку.
                switch(dots[i].GetNapr()) // Движение объектов, в зависимости от направления.
                {
                    case 1:
                        dots[i].SetY(dots[i].GetY() - 1);
                        break;
                    case 2:
                        dots[i].SetY(dots[i].GetY() + 1);
                        break;
                    case 3:
                        dots[i].SetX(dots[i].GetX() - 1);
                        break;
                    case 4:
                        dots[i].SetX(dots[i].GetX() + 1);
                        break;
                }
            }
        }
    }
    public class pointz // Класс цветных точек, выводимых на экране:
    {
        int X, Y, napr, size;   // Объявление переменных координат, направления, размера.
        Color PointCol;         // Объявление переменной, отвечающей за цвет точки.
        public pointz(int X, int Y, int napr, Color PColor, int size) // Базовый конструктор класса.
        {
            this.X = X;
            this.Y = Y;
            this.napr = napr;
            this.PointCol = PColor;
            this.size = size;
        }
        // Методы взаимодействия со всеми приватными переменными класса:
        public int GetX()
        {
            return X;
        }
        public int GetY()
        {
            return Y;
        }
        public int GetNapr()
        {
            return napr;
        }
        public Color GetColor()
        {
            return PointCol;
        }
        public void SetX(int X)
        {
            this.X = X;
        }
        public void SetY(int Y)
        {
            this.Y = Y;
        }
        public void SetSize(int size)
        {
            this.size = size;
        }
        public int GetSize()
        {
            return size;
        }
    }
}

Прикрепленный файлРазмер
SimfikDuke_demo.zip146.65 кб