|
Начало » Конспекты школьника » Часть 2 » [Учимся программировать!][Рисование. Построение графика функции]
Учимся программировать!
Конспекты школьника.
www.klyaksa.net
Рисование. Построение графика функции.
На этом занятии займемся рисованием.
На форме или графическом поле (PictureBox)
можно рисовать различные графические примитивы с использование
графических методов.
Элемент PictureBox предназначен для отображения рисунков и
других графических объектов. Этот элемент управления также является элементом
контейнером, поэтому его можно использовать для объединения других элементов.
События элемента PictureBox обычно не
обрабатываются, хотя при необходимости это можно сделать.
Положение PictureBox в форме задается свойством Align,
которое определяет будет ли PictureBox закрепляться у одного из краев формы или
сохранит положение, заданное разработчиком. Если элемент управления закрепляется
у одного из краев формы, то его размер (ширина или высота) всегда
устанавливается в соответствии с размером формы.
Свойство AutoSize определяет, будут ли автоматически
изменяться размеры элемента управления для отображения рисунков различного
размера.
Самое важное свойство PictureBox — Picture, которое содержит
отображаемый графический объект. Это может быть растровое изображение (*.ВМР),
пиктограмма (*.IСО), метафайл (*.WMF) или расширенный
метафайл (*.EMF), а также GIF и JPEG-файлы.
При выполнении приложения для изменения свойства используется
функция LoadPicture:
Picture1.Picture = LoadPicture("C:\РИСУНКИ\РИСУНОК.BMP")
Сохранить изображение можно при помощи функции SavePicture:
SavePicture Picture1.Picture, "РИСУНОК.BMP"
Методы PictureBox позволяют нарисовать точку, линию и
окружность, а также вывести текст. Вот некоторые методы и свойства:
объект.Scale (x1, y1) - (x2, y2) |
Позволяет задать систему координат и масштаб для
формы или графического поля |
объект.ScaleHeight [= значение]
объект.ScaleWidth [= значение] |
Позволяют установить или прочитать внутренний
размер объекта в установленных ScaleMode единицах. |
объект.ScaleMode [= значение] |
Если единица измерения твип кажется вам непривычной, то с помощью
свойства ScaleMode можно установить и другую. Константы
vbCentimeters, vbMillimeZters или vbPixels позволяют использовать
знакомые вам единицы измерения. |
объект.Line[Step][(x1,1)]-[Step](x2,y2),[color],[B][F] |
Рисует отрезок прямой с заданными координатами
точек начала и конца или прямоугольник с заданными координатами
левого верхнего и правого нижнего углов.
Если указано ключевое слово Step, то первая точка
отсчитывается относительно текущей позиции вывода (свойства CurrentX,
CurrentY), а вторая – относительно первой точки. Параметр color
устанавливает цвет линии, можно применять RGB-функцию. Прямоугольник
рисуется, если указано “B”, при указании “F” прямоугольник
заливается цветом линии. |
объект.PSet [Step] (x, y), [color] |
Выводит на экран точку с заданными координатами
заданного цвета. |
объект.Circle[Step](x,y),radius,[color,start,end,aspect] |
Метод рисует окружность, эллипс или дугу
окружности или эллипса.
Параметры start, end используются при рисовании
дуг, устанавливают углы начала и конца рисования дуг, задаются в
радианах. По умолчанию рисуется полная окружность или эллипс.
Параметр aspect устанавливает степень сжатия эллипса: при значении 1
(по умолчанию) рисуется окружность.
|
объект.Cls |
Метод очищает объект от нарисованного во время
выполнения программы. |
объект.CurrentX [= x]
объект.CurrentY [= y] |
Свойства CurrentX, CurrentY устанавливают или
возвращают графические координаты текущего графического вывода. |
объект.Print [список_Выражений] |
Выражения, заданные аргументом список_Выражений,
печатаются в объекте, начиная с позиции, указанной значениями
свойств CurrentX и CurrentY.
Список_Выражений содержит числовые или символьные
выражения . При использовании нескольких выражений они разделяются
пробелом, точкой с запятой (;), или запятой. Пробел или точка с
запятой указывают, что следующее выражение следует выводить
непосредственно за предыдущим. |
Создайте новый проект. Поместите на форму компонент
графическом поле (PictureBox).
Объект |
Свойство |
Значение |
Форма |
имя |
frmGrafic |
Caption |
График |
Графическом поле (PictureBox) |
имя |
picGrafic |
Appearance |
0 - плоская |
AutoRedraw |
true |
Кнопка |
имя |
cmdPaint |
Caption |
Построить график |
По-умолчанию отсчет в системе координат ведется сверху
вниз (Y) и слева направо (X). В качестве единицы измерения твип (twip). Твип
— это экранно-независимая единица измерения, равная 1/20 точки принтера и
гарантирующая независимость отображения элементов приложения от разрешения
дисплея.
Иногда (например, в нашем случае) бывает не удобно
использовать такую систему координат. Для того задать удобную систему
координат и масштаб для формы или графического поля используется метод
Scale.
Dim XMin, YMin, YMax, XMax As Integer
Private Sub cmdPaint_Click()
XMin = -10
YMin = -10
YMax = 10
XMax = 10
picGrafic.Scale (XMin, YMax)-(XMax, YMin)
End Sub
Теперь нарисуем координатную сетку, оси координат,
подписи к осям.
Private Sub cmdPaint_Click()
XMin = -10
YMin = -10
YMax = 10
XMax = 10
picGrafic.Scale (XMin, YMax)-(XMax, YMin)
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
'координатная сетка
For x = XMin To XMax
picGrafic.Line (x, YMax)-(x, YMin), RGB(240, 240, 240)
Next x
For y = YMin To YMax
picGrafic.Line (XMin, y)-(XMax, y), RGB(240, 240, 240)
Next y
'оси координат
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
picGrafic.Line (XMin, 0)-(XMax, 0), RGB(150, 150, 150)
'подпись осей
picGrafic.ForeColor = RGB(150, 150, 150)
For x = XMin To XMax
picGrafic.CurrentX = x
picGrafic.CurrentY = 0
picGrafic.Print x
Next x
For y = YMin To YMax
picGrafic.CurrentX = 0
picGrafic.CurrentY = y
picGrafic.Print y
Next y
picGrafic.ForeColor = RGB(100, 0, 0)
picGrafic.CurrentX = XMax - picGrafic.TextWidth("X")
picGrafic.CurrentY = 0 - picGrafic.TextHeight("X")
picGrafic.Print "X"
picGrafic.CurrentX = 0 - picGrafic.TextWidth("Y")
picGrafic.CurrentY = YMax
picGrafic.Print "Y"
End Sub
Если сейчас протестировать программу, то мы увидим:
Теперь займемся построением графика. Для удобства изменения и обработки
возможных ошибок вынесем расчет значения функции в отдельную функцию. Пусть,
например, y=x2.
Private Function f(x)
f = x * x
End Function Теперь перебирая все значения
X высчитываем значение функции и строим её график:
Private Sub cmdPaint_Click()
XMin = -10
YMin = -10
YMax = 10
XMax = 10
picGrafic.Scale (XMin, YMax)-(XMax, YMin)
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
'координатная сетка
For x = XMin To XMax
picGrafic.Line (x, YMax)-(x, YMin), RGB(240, 240, 240)
Next x
For y = YMin To YMax
picGrafic.Line (XMin, y)-(XMax, y), RGB(240, 240, 240)
Next y
'оси координат
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
picGrafic.Line (XMin, 0)-(XMax, 0), RGB(150, 150, 150)
'подпись осей
picGrafic.ForeColor = RGB(150, 150, 150)
For x = XMin To XMax
picGrafic.CurrentX = x
picGrafic.CurrentY = 0
picGrafic.Print x
Next x
For y = YMin To YMax
picGrafic.CurrentX = 0
picGrafic.CurrentY = y
picGrafic.Print y
Next y
picGrafic.ForeColor = RGB(100, 0, 0)
picGrafic.CurrentX = XMax - picGrafic.TextWidth("X")
picGrafic.CurrentY = 0 - picGrafic.TextHeight("X")
picGrafic.Print "X"
picGrafic.CurrentX = 0 - picGrafic.TextWidth("Y")
picGrafic.CurrentY = YMax
picGrafic.Print "Y"
For x = XMin To XMax Step 0.01
picGrafic.PSet (x, f(x)), RGB(0, 0, 200)
Next x
End Sub Запускаем и строим график:
Добавим гибкость программе. Пусть пользователь сможет задавать масштаб
системы координат.
Добавьте на форму рамку (Frame), 4 надписи (Label), 4 текстовых поля (TextBox),
кнопку, и задайте им следующие свойства:
Объект |
Свойство |
Значение |
Frame |
Caption |
Масштаб |
Надпись 1 |
Caption |
Минимальное значение X: |
Надпись 2 |
Caption |
Минимальное значение Y: |
Надпись 3 |
Caption |
Максимальное значение X: |
Надпись 4 |
Caption |
Максимальное значение Y: |
Текстовое поле 1 |
имя |
txtMinX |
text |
"" (пустая строка) |
Текстовое поле 2 |
имя |
txtMinY |
text |
"" (пустая строка) |
Текстовое поле 3 |
имя |
txtMaxX |
text |
"" (пустая строка) |
Текстовое поле 4 |
имя |
txtMaxY |
text |
"" (пустая строка) |
Кнопка |
имя |
cmdNewScale |
Caption |
Применить |
Теперь немного исправим уже имеющийся код. Задание масштаба перенесем в
отдельную процедуру. Так же добавим небольшой код
для задания первоначальных значений txtMinX, txtMinY, txtMaxX, txtMaxY
Dim XMin, YMin, YMax, XMax As Integer
Private Function f(x)
f = x * x
End Function
Private Sub cmdPaint_Click()
For x = XMin To XMax Step 0.01
picGrafic.PSet (x, f(x)), RGB(0, 0, 200)
Next x
End Sub
Private Sub Form_Load()
XMin = -10
YMin = -10
YMax = 10
XMax = 10
txtMinX = XMin
txtMinY = YMin
txtMaxX = XMax
txtMaxY = YMax
SetScale
End Sub
Private Sub SetScale()
picGrafic.Scale (XMin, YMax)-(XMax, YMin)
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
'координатная сетка
For x = XMin To XMax
picGrafic.Line (x, YMax)-(x, YMin), RGB(240, 240, 240)
Next x
For y = YMin To YMax
picGrafic.Line (XMin, y)-(XMax, y), RGB(240, 240, 240)
Next y
'оси координат
picGrafic.Line (0, YMin)-(0, YMax), RGB(150, 150, 150)
picGrafic.Line (XMin, 0)-(XMax, 0), RGB(150, 150, 150)
'подпись осей
picGrafic.ForeColor = RGB(150, 150, 150)
For x = XMin To XMax
picGrafic.CurrentX = x
picGrafic.CurrentY = 0
picGrafic.Print x
Next x
For y = YMin To YMax
picGrafic.CurrentX = 0
picGrafic.CurrentY = y
picGrafic.Print y
Next y
picGrafic.ForeColor = RGB(100, 0, 0)
picGrafic.CurrentX = XMax - picGrafic.TextWidth("X")
picGrafic.CurrentY = 0 - picGrafic.TextHeight("X")
picGrafic.Print "X"
picGrafic.CurrentX = 0 - picGrafic.TextWidth("Y")
picGrafic.CurrentY = YMax
picGrafic.Print "Y"
End Sub
Создадим код обработки нажатия кнопки "Применить".
Private Sub cmdNewScale_Click()
XMin = txtMinX
YMin = txtMinY
XMax = txtMaxX
YMax = txtMaxY
picGrafic.Cls
SetScale
End Sub
Готово! Теперь пользователь может изменять масштаб для получения наиболее
красивого графика.
Если Вам не нравиться прерывистый вид графика, то Вы можете сделать
небольшие изменения в коде программы. График рисовать будем не точками, а
линиями.
Private Sub cmdPaint_Click()
picGrafic.CurrentX = XMin
picGrafic.CurrentY = f(XMin)
For x = XMin To XMax Step 0.01
picGrafic.Line -(x, f(x)), RGB(0, 0, 200)
Next x
End Sub
Для того чтобы построить график функции измените функцию
f(). Вот несколько результатов нашей работы:
Применение программы для графического решения уравнений.
Построение графиков можно использовать для приближенного решения уравнений.
Пусть необходимо решить уравнение: x3-2x-3=0.
Зададим программе построить график этой функции.
По графику определяем приближенное решение: x≈1.9.
предыдущий урок
:: содержание :: следующий
урок
|
|
|
|