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

Вход на сайт

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

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

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

Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

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

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Visual Studio 2017
Статья по теме: 

В текстовое поле требуется ввести численное значение(от 1 до 9) и нажать кнопку "Начать", после чего нарисуется кривая Гильберта данной глубины.

Код программы: 

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 Hilbert
{
    public partial class Form1 : Form
    {
 
        private float LastX, LastY;
        private Bitmap HilbertImage;
        private Graphics gr;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            //Инициализация кнопки, textBox'а и lable
            label1.Text = "Глубина";
            button1.Text = "Начать";
            textBox1.Text = "1";
        }
 
 
        private void Drawing(float dx, float dy)//рисование линии
        {
            gr.DrawLine(Pens.Black, LastX, LastY, LastX + dx, LastY + dy);
            LastX += dx;
            LastY += dy;
        }
 
        private void Hilbert(int dep, float dx, float dy)//рекурсивная функция, вызывающая рисование линий в нужном порядке и в нужном месте
        {
            if (dep > 1) Hilbert(dep - 1, dy, dx);
            Drawing(dx, dy);
            if (dep > 1) Hilbert(dep - 1, dx, dy);
            Drawing(dy, dx);
            if (dep > 1) Hilbert(dep - 1, dx, dy);
            Drawing(-dx, -dy);
            if (dep > 1) Hilbert(dep - 1, -dy, -dx);
 
        }
 
        private void Button1_Click(object sender, EventArgs e)//нажитие кнопки
        {
            //инициализация начальных параметров и объявление переменных
            HilbertImage = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.Image = HilbertImage;
            gr = Graphics.FromImage(HilbertImage);
            gr.Clear(pictureBox1.BackColor);
 
            float start_x, start_y, start_length, total_length;
            int dep = int.Parse(textBox1.Text);
 
            if (pictureBox1.Height < pictureBox1.Width)
            {
                total_length = (float)(0.9 * pictureBox1.Height);
            }
            else
            {
                total_length = (float)(0.9 * pictureBox1.Width);
            }
 
            start_x = (pictureBox1.Width - total_length) / 2;
            start_y = (pictureBox1.Height - total_length) / 2;
 
            start_length = (float)(total_length / (Math.Pow(2, dep) - 1));
 
            LastX = (int)start_x;
            LastY = (int)start_y;
            //вызов рекурсивной функции
            Hilbert(dep, start_length, 0);
 
        }
    }
}

Прикрепленный файлРазмер
Pasternak_examples_Hilbert_1.zip54.15 кб