Трусов М. А. Visual Basic .NET. Создание графических объектов и основы программирования стр.45
Трусов М. А. Visual Basic .NET. Создание графических объектов и основы программирования стр.45

Итак, из всего сказанного выше следует сделать следующие выводы. Для построения той или иной геометрической фигуры существуют свои методы, использующие параметры этих фигур. Меняя эти параметры, можно изменять созданный рисунок. При этом используются обычные приемы программирования, которые с таким же успехом применяются и в других программах, не имеющих отношения к созданию графики. Но Visual Basic .NET обладает специфическими методами преобразования графики. Речь идет о так называемых аффинных преобразованиях. В большинстве случаев использовать этот вид программирования намного удобнее.

Для сравнения попробуем составить одну и ту же программу разными способами. Задача программы - создать вращающуюся линию, то есть начало отрезка прямой должно остаться неподвижным, а конец - описывать окружность. Главная проблема при составлении этого кода заключается в необходимости поддерживать неизменной длину отрезка прямой. Ведь при изменении координат неизбежно изменится и длина линии. Поэтому нам придется вспомнить тригонометрию. Если представить отрезок прямой как гипотенузу прямоугольного треугольника, а горизонтальные и вертикальные координаты использовать в качестве катетов, с помощью тригонометрических функций sin и cos можно сохранить неизменной длину вращающейся прямой. Вот как выглядит код, составленный с помощью обычных методов преобразования координат.

Private Sub Forml_Paint (ByVal sender As Object, ByVal e _ As System.Windows.Forms.PaintEventArgs )_ Handles MyBase.Paint

3*

Трусов М. А. Visual Basic .NET. Создание графических объектов и основы программирования

ГЛАВА 6 ▼ Динамика графических объектов

Static a As Integer = 250 Static n As Integer = 150 Static k As Double k = k - 0.01

e.Graphics.DrawEllipse (New Pen (Color.Blue, 2), _ 50, 50, 200, 200)

e.Graphics.DrawLine (New Pen (Color.Black, 3), 150, _ 150, a, n)

n = 50 + (100 - (Math.Sin(k) * 100)) a = 150 + (Math.Cos(k) * 100) End Sub

Private Sub Timerl_Tick (ByVal sender As System. Object, ByVal e _

As System.EventArgs)Handles Timer1.Tick Me.Refresh () End Sub

А вот как выглядит код с использованием методов класса Matrix, решающий ту же задачу:


⇐ Предыдущая Следующая ⇒
 
 
 
Powered by Exponenta