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

Вход на сайт

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

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

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

Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Комментарии на английском переведите на русский. Дополните код комментариями, чтоб было понятно как работает алгоритм
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

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

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