Создание графиков |
Автор Виталий | |
02.06.2002 г. | |
В этой статье рассмотрены некоторые общепринятые способы построения различных графиков, столбчатых и круговых диаграмм
Построение графиков функций в среде Visual Basic. В этой статье рассмотрены некоторые общепринятые способы построения различных графиков, столбчатых и круговых диаграмм, а так же описан компонент ActiveX, специально разработанный для построения фигур Лиссажу, и пример его использования. Для построения графиков функций обычно используется метод PSet. Синтаксис метода следующий: [ИмяОбъекта.] PSet(x,y) [,Цвет] Объектом может быть, к примеру, Picture, а если ИмяОбъекта отсутствует, тогда метод Pset используется Экранной формой. (x,y) – координаты рисуемой точки, где под точкой понимается маленькое пятно на экране, имеющее заданный цвет, или черный по умолчанию. Цвет можно задавать константами VB (vbRed –красный), числами типа Long (255- красный). Если перед выполнением метода PSet не применялся метод Scale, тогда в качестве координат x,y будут использоваться абсолютные координаты объекта. Для изменения размеров точки (а значит и толщины линии) нужно изменить свойство [ИмяОбъекта.]DrawWidth, которое может быть целым числом. Для того, что бы получить некоторую линию, отражающую функциональную зависимость можно записать так: PSet(x,F(x)) При этом одной из координат является значение аргумента функции, а второй – значение самой функции, и поместить эту строку в цикл For...Next со счетчиком равным значению аргумента x , и задать достаточно малый шаг изменения аргумента, обычно достаточно 0.01. График может сопровождаться осями координат, и масштабироваться в зависимости от пределов изменения аргументов функции. Все выше сказанное проиллюстрирую программой прорисовки графика функции sin(x): Private Sub Command1_Click() Dim x As Single Picture1.Scale (-12, 2)-(12, -2) Picture1.Line (-12, 0)-(12, 0) Picture1.Line (0, 2)-(0, -2) For x = -10 To 10 Step 0.01 Picture1.PSet (x, Sin(x)) Next x End Sub На форму надо положить PictureBox и CommandButton, график отображается черным (по умолчанию) цветом. Для отображения различных дискретных значений обычно используются столбчатые диаграммы, (все видели итог работы программы для сравнения производительности компьютеров). Для построения столбчатых диаграмм обычно используется метод Line в режиме вычерчивания прямоугольников. При этом координаты левого верхнего угла прямоугольника задаются как (i,m(i)), где m(i) – значение i –го элемента некоторого массива, а противоположного угла как (i+d,0), где d ширина прямоугольника, основание которого лежит на оси абсцисс. Например для некоторого массива m(i) из 10 чисел, значение которых не превышает 100 можно построить диаграмму, используя следующий код: Private Sub Command1_Click() Dim m(10) 'далее заполнить массив значениями ' For i = 0 To 9 m(i) = Val(InputBox("Очередное число")) Sum = Sum + m(i) Next i 'потом сама диаграмма Picture1.Scale (-2, 110)-(12, 10) Picture1.Line (0, 0)-(0, 100) Picture1.Line (0, 0)-(10, 0) For i = 0 To 9 Picture1.Line (i, m(i))-(i + 1, 0), , B Next i End Sub На форму надо положить PictureBox и CommandButton. В этой диаграмме столбцы будут примыкать друг к другу, цвет по умолчанию черный, ширина столбца равна 1. Для того, чтобы показать долю какого либо числа от известного общего количества можно использовать круговые диаграммы. Примером использования могут служить диаграммы показывающие доли занятого и свободного дискового пространства HDD на вкладке «Мой компьютер». Для построения круговых диаграмм используется метод Circle в режиме вычерчивания дуги с отрицательными значениями начального и конечного углов в радианах. Т.к. каждый сектор определяет долю каждого числа от суммы (Sum) всех чисел в массиве m(i) , то перед построением диаграммы надо предварительно вычислить сумму всех его элементов, а затем долю каждого числа представить соответствующей долей дуги окружности - 2*Pi*(m(i)/Sum), где Pi = 3,141592… Пример для некоторого массива из 3 чисел: Dim m(3) As Single Dim a, b, Sum As Single, i As Integer ___________________________________ Private Sub Command1_Click() For i = 0 To 2 m(i) = Val(InputBox("Очередное число")) Sum = Sum + m(i) Next i Scale (-10, 10)-(10, -10) For i = 0 To 2 b = b + 6.28 * m(i) / Sum Circle (0, 0), 5, , -a, -b a = a + 6.28 * m(i) / Sum Next i End Sub Для того, что бы диаграмма была выразительной и наглядной каждый сегмент должен быть окрашен в свой цвет. Чтобы раскрасить сектора, нужно равномерно залить их каким ни будь цветом, для этого свойство FillStyle объекта должно иметь значение 0, а непосредственно перед вычерчиванием сектора свойство FillColor должно получить значение нужного цвета. Для наблюдения фигур Лиссажу был разработан компонент ActiveX, который представляет собой прямоугольный экран осциллографа. Как известно, уравнения кривой Лиссажу имеет вид :x=sin(F1*t);y=sin(F2*(t+A)), где F1 - Частота колебаний по оси ОХ; F2 - Частота колебаний по оси ОY; A - Начальная фаза колебаний по оси OY, t-время. Фигура Лиссажу получается, если на один вход осциллографа подавать сигнал с частотой F1, и одновременно на другой вход сигнал с кратной ей частотой F2. Причем, в зависимости от того во сколько раз частота колебаний одного сигнала превосходит частоту колебаний другого сигнала, столько и будет иметь петлей кривая Лиссажу. Работу компонента grafLiss.ocx наглядно видно из прилагаемой программы, с подробными комментариями. 11.04.02 г. Виталий . |