Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

VB-2012 / 2-cеместр / Дневники / Методика / Лаб_Графика

.doc
Скачиваний:
9
Добавлен:
26.03.2015
Размер:
72.7 Кб
Скачать

Графика

В VB есть три графических объекта, которые позволяют работать с графикой, это:

  • форма (Form);

  • управляющий элемент графическое поле (PictureBox);

  • рисунок (Image).

Форма и графическое поле – это два объекта-контейнера, которые:

  • способны содержать в себе точечный рисунок из графического файла;

  • обладают графическими методами и позволяют с помощью графических методов рисовать на своей поверхности;

  • способные содержать в себе другие управляющие элементы.

Объект Image (рисунок) может только содержать в себе точечный рисунок, не обладает графическими методами и не не может включать управляющих элементов, т.е. не является контейнером.

Графические методы

Для задания цвета графических объектов в VB используется специальная функция RGB, название которой образовано по первым буквам английских слов Red (красный), Green (зеленый) и Blue (синий). Функция использует три целочисленных аргумента RGB(R, G, B), которые могут принимать значения от 0 до 255. Первый параметр определяет интенсивность красного цвета, второй – интенсивность зеленого, третий – интенсивность синего. При значении параметра 0 – соответствующий цвет полностью отсутствует, 255 – максимальная интенсивность.

Ниже в таблице приводятся значения параметров RGB-функции для наиболее распространенных цветов.

Цвет

Красный компонент

Зеленый компонент

Синий компонент

Черный

0

0

0

Синий

0

0

255

Зеленый

0

255

0

Циан

0

255

255

Красный

255

0

0

Мажента

255

0

255

Желтый

255

255

0

Белый

255

255

255

Для нанесения точки применяется метод PSet: [Объект.]PSet(x,y)[,Цвет]

где х и y – координаты точки.

Например, нанесет точку синего цвета инструкция: PSet(300,400), RGB(0,0,255)

Стереть точку можно инструкцией, которая задает для нее цвет фона: PSet(300,400), BackColor

Для рисования линии, соединяющей точку (x1, y1) с точкой (x2, y2), следует применить метод

Line: [Объект.]Line [(x1, y1)] – [Step](x2, y2)[, Цвет]

Линия включает первую точку, но не включает вторую, конечную точку. Это полезно при рисовании замкнутого контура. Последнюю точку линии можно обозначить инструкцией PSet Step (0, 0)[, Цвет]

Слово Step перед координатами означает, что они отсчитываются относительно последней точки рисования.

Например, инструкция Line (100, 200)–(150, 250) эквивалентна инструкции Line (100, 200)–Step(50, 50).

Если первая пара координат опущена, то линия будет нарисована от позиции текущей точки, которой является последняя точка рисования, до точки с координатами (x2, y2). Текущая точка может быть также задана с помощью ее координат CurrentX и CurrentY.

Например, следующие инструкции нарисуют треугольник:

CurrentX = 500

CurrentY = 1500

Line –(2000, 3000)

Line –(1000, 3000)

Line –(500, 1500)

Для рисования прямоугольников вместе с методом Line используется аргумент B, например инструкция

Line (200, 200)–Step(1000, 1000), , B

нарисует квадрат со стороной 1000 твипов. Две запятые перед аргументом B указывают, что аргумент Цвет опущен.

Для рисования окружностей, эллипсов, дуг и секторов может быть применен метод Circle. Ниже показан синтаксис этого метода: [Объект.]Circle [Step](x, y), Радиус[, [Цвет][, [Нач], [Кон][, Вид]]]

Здесь приняты некоторые новые обозначения:

x, y – координаты центра;

Радиус – радиус окружности, для эллипса – размер более длинной полуоси;

Нач и Кон – выраженный в радианах угол начала и угол конца дуги, которые присутствуют или отсутствуют в обращении к методу только вместе;

Вид – отношение вертикальной полуоси эллипса к горизонтальной полуоси (по умолчанию равен 1).

Например, процедура Form_Click в режиме выполнения после щелчка на форме нарисует на форме дугу окружности с центром в точке с координатами 2000, 1500, радиуса 1000 твипов, от начальной точки, расположенной под углом pi / 2, против часовой стрелки, до конечной точки, находящейся под углом pi / 3:

Private Sub Form_Click()

Const pi = 3.14159265

Circle (2000, 1500), 1000, , pi / 2, pi / 3

End Sub

Если перед началом или перед концом дуги поставить знак минус, то при рисовании дуги эта точка дуги будет соединена прямой с центром окружности.

Обращение Circle (600, 1000), 800, , , , 2 нарисует эллипс, вертикальная ось которого равна 1600, а горизонтальная ось равна 800.

При рисовании прямоугольника, круга или эллипса эти фигуры могут быть заполнены сплошным цветом или цветными линиями.

Свойство FillStyle отвечает за вид заполнения рисуемой фигуры, предлагая на выбор один из восьми видов заполнения. По умолчанию имеет значение 1 – Transparent (прозрачное, фигура выглядит незаполненной). Значение этого свойства 0 – Solid обеспечивает заполнение фигуры сплошным цветом, установленным свойством FillColor. Остальные значения 2 – 7 предлагают заполнение вертикальными, горизонтальными, наклонными линиями или в клетку.

Толщина линии при выводе задается значением свойства DrawWidth объекта.

Будет линия сплошной или различного вида прерывистой – определяет значение свойства DrawStyle объекта.

Свойство AutoRedraw формы или графического поля разрешает (при его значении, равном True) или запрещает (при его значении, равном False) перерисовывание результатов работы графических методов, например при изменении размеров окна.

Методы, осуществляющие вывод информации на форму, позволяют направлять ее непосредственно на принтер. Принтер (объект Printer) рассматривается как особая форма, размер которой совпадает с размером печатаемой страницы. Метод Scale применим для объекта Printer и позволяет установить нужную систему координат.

  1. Реализовать практически следующие графические команды:

Private Sub Graf11_Click()

Const pi = 3.14159265

Cls 'очистка экрана

DrawWidth = 1 'установка толщины линии

PSet (300, 400), RGB(100, 0, 255) ' отрисовка точки

Line (400, 500)-(650, 1050) ' отрисовка линии

CurrentX = 500

CurrentY = 1500

Line -(2000, 3000) ' отрисовка треугольника

Line -(1000, 3000)

Line -(500, 1500)

Line (200, 200)-Step(1000, 1000), , B ' отрисовка прямоугольника

Circle (2000, 1500), 500, , pi / 2, pi / 3 ' отрисовка дуги

Circle (3600, 2000), 800, , , , 2 ' отрисовка эллипса

Form1.FillStyle = 0

Circle (4000, 3500), 600, RGB(255, 0, 0) ' отрисовка окружности

End Sub

  1. Построим график функции у = -0.25х3 + 0.14х2 + 0.25 х – 25 на отрезке значений аргумента[-10,+10]. Анализ показывает, что область значений функции на этом отрезке: -270 < у < +270.

Option Explicit

Function Primer(x As Single) As Single

Primer = -0.25 * x ^ 3 + 0.14 * x ^ 2 + _

0.25 * x - 25

End Function

Private Sub Form_Click()

Dim x As Single

Scale (-10, -270)-(10, 270) 'установка масштаба

Cls 'очистка экрана

DrawWidth = 1 'установка толщины линии

Line (-10, 0)-(10, 0) 'рисование оси Х

Line (0, -270)-(0, 270) 'рисование оси Y

CurrentX = -10 'текущее значение Х

CurrentY = Primer(-10) 'текущее значение Y

For x = Step 0.5

Line -(x, Primer(x)) 'построение графика

Next

End Sub

Постановка задачи 1: Реализовать приложение, которое рисует окружность, при помощи клавиш F1..F10 позволяет изменить цвет окружности, при помощи клавиш со стрелками обеспечивает перемещение окружности по экрану - влево, вправо, вниз, вверх.

В модуле :

Public x As Long

Public y As Long '* Координаты *

Public r As Long '* Радиус *

Public c As Long '* Цвет *

Const pi = 3.14159265

Private Sub Упрокр_Click()

Cls 'очистка экрана

AutoRedraw = True

DrawStyle = 0 '

DrawWidth = 2 'установка толщины линии

c = RGB(0, 0, 255) '* !!! Не трогать !!! *)

x = Form1.Width \ 2 '* !!! Не трогать !!! *)

y = Form1.Height \ 2 '* !!! Не трогать !!! *)

r = 500 '* !!! Не трогать !!! Но если очень хочется, то ... *)

Form1.FillStyle = 1

Circle (x, y), r, c

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Cls 'очистка экрана

Select Case KeyCode

'Изменение цвета окружности

Case 112

c = RGB(255, 255, 255) 'белый - F1

Case 113

c = RGB(0, 200, 255) 'голубой - F2

Case 114

c = RGB(255, 0, 0) 'красный - F3

Case 115

c = RGB(0, 255, 0) 'ярко зеленый - F4

Case 116

c = RGB(0, 0, 255) 'синий -F5

Case 117

c = RGB(0, 255, 255) 'бирюзовый - F6

Case 118

c = RGB(255, 0, 255) 'лиловый - F7

Case 119

c = RGB(255, 255, 0) 'желтый - F8

Case 120

c = RGB(200, 0, 0) 'темно красный -F9

Case 121

c = RGB(0, 200, 0) 'темно зеленый - F10

' Перемещение окружности по экрану при ' помощи стрелок

Case 37 'cтрелка влево

If x > r + 300 Then

Circle (x, y), r, Form1.BackColor

x = x - 300

End If

Case 40 'cтрелка вниз

If y + 300 < Form1.Height - (2 * r + 300) Then

Circle (x, y), r, Form1.BackColor

y = y + 300

End If

Case 38 'cтрелка вверх

If y > (r + 300) Then

Circle (x, y), r, Form1.BackColor

y = y - 300

End If

Case 39 'cтрелка вправо

If x < Form1.Width - (r + 300) Then

Circle (x, y), r, Form1.BackColor

x = x + 300

End If

End Select

Circle (x, y), r, c

End Sub

4