Scientific journal
Modern high technologies
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,940

1 1
1

Введение в работу – Графическая библиотека GDI была создана как интерфейс Windows для представления графических объектов. Она отвечала за отрисовку линий и кривых, отображение шрифтов и обработку палитры. С выходом Windows XP появился потомок подсистемы, GDI+, основанной на C++ .GDI+ является улучшенной средой для 2D-графики, в которую добавлены такие возможности, как сглаживание линий (antialiasing), использование координат с плавающей точкой градиентная заливка . Однако ни GDI ,ни в GDI+ нет растеризации для отрисовки 3D-графики.

Цель настоящей работы – разработка алгоритма и графического модуля, демонстрирующих возможности GDI+ по работе с трехмерной графикой.

Разработка может использоваться в учебном процессе для ознакомления студентов со стандартными средствами GDI+ и их возможными комбинациями с целью ознакомления с максимально эффективным алгоритмом разработки трехмерной графики, а так же для моделирования простых трехмерных объектов, используя разработанный алгоритм и библиотеку GDI+.

Входные и выходные данные

• Тип фигуры(призма, пирамида, бипирамида, звезда);

• Параметры фигуры(цвет, радиус , высота, скорость вращения, количество сторон);

• Требования к входным данным:

• Вхождение в диапазон

• 0<= цвет <=255;

• 64<= радиус <=128;

• 3<= количество сторон <=8;

• -128<= высота <=128;

• -1<= скорость вращения <=1.

Выходными данными являются:

Фигуры, отображаемые на экране, параметры которых изменяются.

Требования к выходным данным:

• Фигуры не должны мерцать ;

•Заливка не должна выходить за пределы фигуры ;

• Параметры фигуры и сама фигура должны меняться по таймеру .

Алгоритм:

Координаты:

1. Задаются параметры фигуры

2. В зависимости от типа фигуры задаются центры одной или двух окружностей(Две для призмы) и вершины( призма -0, пирамида -1, бипирамида -2)

3. В зависимости от заданного количества окружности разбиваются по формуле:

c(i).X = Fix(радиус * Math.Cos(скорость + №точки * Math.PI / кол-во сторон))

c(i).Y = Fix(-30 * Math.Sin(скорость + №точки * Math.PI / кол-во сторон))

Прорисовка:

4. Из массива координат создается массив вершин путем объединения нескольких координат в отдельном массиве.

5. Из массива координат делается массив вершин путем объединения нескольких координат в другой массив.

6. Точки разбиения окружности соединяются друг с другом и с вершиной(-ами)

7. Для заливки граней выбираются 3(4) точки одной грани и соединяются. Для заливки основания(-й) выбираются первая, вторая и последняя точки.

8. Вывод на экран осуществляется в бесконечном цикле буферизации.

Фрагмент Кода

For i = 1 To n//координатный цикл

c(i).X = Fix(r * Math.Cos( i * Math.PI / an))//вычисление координаты x

c(i).Y = Fix(-30 * Math.Sin( i * Math.PI / an)) вычисление координаты y

If i <= n / 2 Then h(i) = 1 / 40 * centerpz Else h(i) = -1 / 40 * centerpz//корреляционный параметр для перевода координаты y в трехмерное пространство.

c(i).Y = 96 * c(i).Y / (100 + h(i))/перевод координаты y в трехмерное пространство.

c(n + 1).X = c(1).X

c(n + 1).Y = c(1).Y//задние рвенства последнео элемента массива равным первому для замыкания окружности

Next}

Dim Lgb As New LinearGradientBrush( _// Градиентная заливка

New Point(c(1).X, c(1).Y), _ // первая точка

New Point(c(n).X, c(n).Y), _ // вторая точка

Color.FromArgb(190, i2, j, k), _// первый цвет

(Color.FromArgb(190, k, i2, j))) // второй цвет

Lgb.SetSigmaBellShape(0.5, 1)//коэффициент градиента

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick//изменение параметра радиус по таймеру

If HScrollBar5.Value = 32 Then bul2 = False

If HScrollBar5.Value = 128 Then bul2 = True

If bul2 = True Then HScrollBar5.Value -= 1//уменьшать до минимального

If bul2 = False Then HScrollBar5.Value += 1//увеличивать до максимального.

r = HScrollBar5.Value//присвоение значения переменной

TextBox5.Text = r // вывод значния переменной.

Описания результатов решения

Написанная программа полностью соответствует поставленной задаче. Она решает ряд проблем, описанных в цели разработки, облегчает и ускоряет разработку графических

приложений.

Также данная программа имеет удобный пользовательский интерфейс, легка в управлении.

Скриншоты:

sav1.tif 

 

sav2.tif 

 

sav3.tif