Среда программирования:
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.zip | 54.15 кб |