РАЗРАБОТКА АЛГОРИТМА РАБОТЫ С ТРЕХМЕРНОЙ ГРАФИКОЙ С ПОМОЩЬЮ GDI+ И ДЕМОНСТРАЦИЯ ЕГО В СРЕДЕ VISUAL BASIC - Студенческий научный форум

VI Международная студенческая научная конференция Студенческий научный форум - 2014

РАЗРАБОТКА АЛГОРИТМА РАБОТЫ С ТРЕХМЕРНОЙ ГРАФИКОЙ С ПОМОЩЬЮ GDI+ И ДЕМОНСТРАЦИЯ ЕГО В СРЕДЕ VISUAL BASIC

Савченко А.В. 1
1Россия, Ростовская область, Город Таганрог, ул. Чехова 75/пер. Тургениевский 44 Авиационный колледж имени В.М.Петлякова
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение в работу - Графическая библиотека 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 // вывод значния переменной.

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

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

приложений.

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

Скриншоты:

 

    

Список литературы

 

1.     С.Н. Лукин - Понятно о Visual Basic 2005, 878с.;         

2.     К. В. Постнов - Компьютерная графика, Москва 2009, 249 стр.;

3.     http://www.wikipedia.org/- интернет энциклопедия

4.     http://www.cyberforum.ru/- форум программистов

.

 

Просмотров работы: 1500