- •Информатика
- •Введение
- •1. Особенности вычислительного процесса в компьютере
- •1.1. Двоичная система счисления
- •1.2. Кодирование информации
- •2. Основы построения алгоритмов
- •2.1. Принципы описания алгоритмов
- •2.2. Примеры построения алгоритмов типовых задач
- •3. Вывод значений X и y
- •Конец цикла 2
- •3. Алгоритмический язык Visual Basic – основные сведения
- •3.1. Историческая справка
- •3.2. Среда программирования Visual Basic 6.0
- •3.3. Основные конструкции языка
- •3.3.1. Алфавит
- •3.3.2. Переменные
- •3.3.3. Константы
- •3.4. Типы переменных
- •3.4.1. Характеристики переменных
- •3.4.2. Способы задания типа
- •3.5. Основные функциональные операторы
- •3.5.1. Оператор присваивания.
- •3.5.2. Оператор условного перехода.
- •3.5.3. Операторы цикла.
- •3.6. Операторы ввода и вывода информации
- •3.6.1. Операторы ввода значений переменных с клавиатуры.
- •3.6.2. Операторы вывода значений переменных на экран.
- •3.7. Примеры типовых программ
- •4. Алгоритмический язык Visual Basic – более сложные структуры
- •4.1. Файловый ввод и вывод - общие сведения
- •4.2. Организация работы с файлом.
- •4.3. Подпрограммы и их использование для написания сложных программ
- •4.3.1. Назначение подпрограмм
- •4.3.2. Типы подпрограмм
- •4.3.3. Локальные переменные формы
- •5. Операторы и функции, работающие с символьными данными
- •5.1. Ввод символов с целью управления действиями
- •5.2. Функции, работающие с таблицей ascii-кодов
- •5.3. Функции, работающие со строкой символов
- •6. Графика
- •6.1. Воспроизведение цвета
- •6.2. Операторы (Методы) изображения стандартных фигур
- •6.3. Программирование движения фигур на экране.
- •9. Математические вычисления и встроенные функции.
6. Графика
6.1. Воспроизведение цвета
Любое графическое изображение на экране монитора образуется движением светящейся точки, размер которой равен одному твипу. Точка движется по форме, начиная с верхнего левого угла, и постепенно строчка за строчкой засвечивает всю форму. Этот процесс происходит за очень малое время (доли секунды) и повторяется автоматически, то есть независимо от программы. Программа же обеспечивает задание цвета точки в определенных координатах формы.
Цвета закодированы. Имеется три варианта кодировки и, соответственно, три способа воспроизведения цвета.
Первый способ – указание цвета из основной палитры.
Таблица 6.1. Основная палитра.
N |
Цвет |
Кодовое имя |
1 |
Черный |
vbBlack |
2 |
Красный |
vbRed |
3 |
Зеленый |
vbGreen |
4 |
Синий |
vbBlue |
5 |
Голубой |
vbCyan |
6 |
Фиолетовый |
vbMagenta |
7 |
Желтый |
vbYellow |
8 |
Белый |
vbWhite |
Необходимо помнить, что цвета основной палитры указаны для черного фона. Если фон другой, то основной цвет меняет оттенок.
Второй способ – смешивание красок с помощью функции RGB (по первым буквам названий из основной палитры). Функция эта имеет вид RGB(c1, c2, c3), где в скобках указываются три числа, устанавливающие пропорции красного, зеленого и синего циетов.
Каждое из чисел (c1, c2, c3) имеет предел от 0 до 255. Если все числа поставить одинаковые, то цвет будет одного из серых оттенков. Если все они равны нулю – цвет черный, а если 255 – цвет белый.
Третий способ – просто число от 0 до 16 777 215.
Например, цвет фона на форме можно задать так:
Form1.BackColor= vbBlue
Form1.BackColor= RGB(200, 57, 129)
Form1.BackColor= 17254.
Способ задания цвета выбирается в зависимости от потребностей графики.
6.2. Операторы (Методы) изображения стандартных фигур
Стандартными фигурами являются точка, прямая линия, прямоугольник и окружность. Для изображения точки служит метод PSET (от слов point set – поставить точку). Этот оператор имеют следующий формат:
PSET [step] (x, y), c
Параметры x, y – это координаты точки в твипах. Параметр step означает, что координаты x, y относительные, то есть отсчитываются от координат предыдущей фиксированной точки. Если он отсутствует, координаты абсолютные – отсчитываются от точки с координатами (0,0), то есть от левого верхнего угла экрана. Параметр c означает цвет. Он может быть не указан. Тогда оператор PSET ставит точку цветом, определенным предыдущим оператором. А если такого нет, то точка будет черной.
Прямая линия изображается методом LINE [step] (x1, y1) - [step] (x2, y2), c.
Параметры (x1, y1) и (x2, y2) являются соответственно координатами начальной и конечной точек прямой. Параметр c также означает цвет. Параметр step имеет тот же смысл, что и раньше. Координаты (x1, y1) могут быть не указаны. Тогда в качестве начальной точки принимается точка, зафиксированная предыдущим оператором. Это используется при построении кривых по точкам.
Если после параметра цвета через запятую поставить символ B, метод LINE нарисует прямоугольник: LINE [step] (x1, y1) - [step] (x2, y2), c, B(F).
Левый верхний угол прямоугольника находится в точке (x1, y1), а правый нижний угол – в точке (x2, y2). Если же вместо символа B поставить BF, то прямоугольник будет закрашен цветов c.
Окружность изображается методом CIRCLE со следующими параметрами:
CIRCLE [step] (x, y), r, c, s, f, k.
Параметр step имеет то же значение, что и выше. Параметры (x, y) являются координатами центра окружности; r – ее радиус в пикселах; c - цвет; s и f – соответственно начало и конец окружности в радианах; k – коэффициент сжатия, позволяющий нарисовать эллипс. Здесь любой параметр, кроме радиуса, может быть опущен.
Если экран должен быть очищен для воспроизведения следующих изображений, используется метод CLS (clear screen). После него точка фиксируется в центре экрана.
Ещё один полезный метод называется Point(x,y). Это функция, которая определяет цвет точки с координатами (x,y), расположенной на экране (форме).
Ниже приведены основные свойства объектов, связанные с окраской.
DrawWidth – толщина линий.
ForeColor - цвет линий ( и текста).
BackColor - цвет фона.
FillColor – цвет заливки стандартной фигуры.
FillStyle – стиль заливки: VBSolid – сплошная.
Вспомним, что в общем виде формат оператора выглядит так:
Объект. Свойство = Значение
Это относится и к операторам окраски.
Следующие ниже примеры иллюстрируют изображение стандартных фигур.
Пример 6.1. Геометрическая задача.
С помощью датчика случайных чисел генерируются координаты n точек в заданных пределах x1, x2, y1, y2. Таким образом, все точки попадают в прямоугольник соответствующего размера. Заданы координаты центра и радиус некоторой окружности. Требуется подсчитать число точек, попавших внутрь окружности. Признак попадания: расстояние между точкой и центром окружности меньше ее радиуса. Требуется изобразить на экране соответствующий рисунок.
Программа включает три подпрограммы со следующими функциями: генерация координат точек, подсчет числа точек в окружности, изображение на экране.
Private Sub Command1_Click()
'Пример 6_1
'Список подпрограмм
'SUB gen (x1, x2, y1, y2, x(), y(), n)
'SUB calcule (xc, yc, r, x(), y(), n, calc)
'SUB pnt (x(), y(), n, xc, yc, r, calc, x1, y1, x2, y2)
xc = 3000: yc = 2400: r = 1000 'Координаты и радиус окружности
x1 = 1000: x2 = 4500: y1 = 1000: y2 = 4000 'Координаты прямоугольника
n = InputBox("Задайте число точек")
calc = 0 'Счетчик точек, попавших в окружность
gen x1, x2, y1, y2, x, y, n 'Генерация координат точек
Call calcule(xc, yc, r, x, y, n, calc) 'Расчет числа точек в окружности
Call pnt(x, y, n, xc, yc, r, calc, x1, y1, x2, y2) 'Рисунок
End Sub
Private Sub calcule(xc, yc, r, x, y, n, calc)
For i = 1 To n
If Sqr((x(i) - xc) ^ 2 + (y(i) - yc) ^ 2) < r Then calc = calc + 1
' Проверка условия попадания точки в окружность
Next i
Print "calcule"
End Sub
Private Sub gen(x1, x2, y1, y2, x, y, n)
For i = 1 To n
x(i) = x1 + (x2 - x1) * Rnd 'RND – функция для генерации
y(i) = y1 + (y2 - y1) * Rnd 'случайных чисел в пределах (0-1)
Next i
Print "gen"
End Sub
Private Sub pnt(x, y, n, xc, yc, r, calc, x1, y1, x2, y2)
Form1.BackColor = RGB(100, 100, 100)
'Form1.BackColor = vbBlue 'Фон окрашен синим
Form1.CurrentX = 50
Form1.CurrentY = 50
Print "number of points: "; calc 'Вывод на форму числа точек в окружности
Line (0, 3000)-(5000, 3000), vbRed ' Рисунок оси x
Line (2500, 0)-(2500, 5000), vbRed ' Рисунок оси y
Form1.CurrentX = 4900
Form1.CurrentY = 2700
Print "x" 'Обозначение оси x
Form1.CurrentX = 2600
Form1.CurrentY = 200
Print "y" ' Обозначение оси y
Line (x1, y1)-(x2, y2), , B 'Рисунок прямоугольника
Circle (xc, yc), r, vbGreen 'Рисунок окружности
For i = 1 To n
PSet (x(i), y(i)), vbYellow 'Рисунок точки
Next i
End Sub
Пример 6.2. Построение графика функции.
Программа для построения графика произвольной функции должна учитывать минимальное и максимальное значение как аргумента, так и функции. В приведенной программе строится график функции y(x)=0.01xsin(x) в пределах -5<x<10. Таким образом, минимальное и максимальное значение x определено последним неравенством. При этом функция y(x) меняется в пределах от –0.1 до +0.1. Программа вычисляет n точек и проводит линии между смежными точками. В связи с указанными пределами по x и y требуется введение масштабных множителей и пересчет (сдвиг) начала координат, так как отрицательные значения не имеют смысла при определении координат точки на форме.
Эти операции присутствуют в приведенном примере программы. Заблокированные строки использовались при отладке
Private Sub Command1_Click()
'Пример 6_2 Построение графика функции
Dim x(500) As Integer: Dim y(500) As Single
Dim xm(500) As Integer: Dim ym(500) As Single
Dim Mx As Integer: Dim My As Integer
n = 30 'Количество точек
x(1) = -10: dx = 30 / n: y(1) = fny(x(1)) 'Задана начальная точка и интервал по x.
My = InputBox("Масштаб по вертикали (70-125) My=")
Form1.CurrentX = 50 ‘Установлена начальная точка отсчета координат рисунка
Form1.CurrentY = 50
For i = 2 To n
x(i) = (x(i - 1) + dx) 'Вычисляются значения аргумента
y(i) = -fny(x(i)) 'и функции
'Print x(i), y(i)
Next i
Mx = 5000 / 30
'Print "======="; x(1)
For i = 1 To n
'Print i, x(i), y(i)
xm(i) = (x(i) - x(1)) * Mx + 100 ' Вычисляются масштабированные значения аргумента
ym(i) = y(i) * My + 3000 ' и функции
'Print xm(i); ym(i)
Next i
PSet (x(10), y(10)), vbGreen
'Form1.BackColor = RGB(100, 100, 100)
Form1.BackColor = vbBlue 'Фон окрашен синим
Line (100, 3000)-(5100, 3000), vbRed ' Рисунок оси x
Line (1770, 0)-(1770, 6000), vbRed ' Рисунок оси y
Form1.CurrentX = 5000
Form1.CurrentY = 2700
ForeColor = vbWhite
Print "x" 'Обозначение оси x
Form1.CurrentX = 2000
Form1.CurrentY = 200
Print "y" ' Обозначение оси y
For i = 1 To n - 1
If y(i) = 0 Then
Circle (xm(i), ym(i)), 50, vbBlack ' Определяется начало координат на рисунке,
'Print xm(i), ym(i) ‘чтобы подставить в рисунок оси y
End If
Line (xm(i), ym(i))-(xm(i + 1), ym(i + 1)), vbYellow
Next i
End Sub
Private Function fny(z)
fny = z * Sin(z)
End Function
Пример 6.3. Рисунок четырёх фигур.
Треугольник рисуется из начальной точки с координатами (x=2500, y=200). Внутри он не окрашивается, так как не является стандартной фигурой.
Private Sub Command1_Click()
'Пример 6_3 Окружность, линия, прямоугольник, треугольник
'Form1.BackColor = RGB(100, 100, 100) 'Цвет формы серый
Form1.BackColor = vbBlue 'Цвет формы синий
ForeColor = vbRed ‘Цвет линий
FillStyle = vbSolid ‘Стиль заливки
FillColor = vbYellow ‘Цвет заливки
DrawWidth = 7 ‘Толщина линий
Line (2530, 170)-(1030, 3030) ‘Это треугольник
Line (970, 3000)-(5030, 3000)
Line (5030, 3030)-(2470, 170)
ForeColor = vbGreen
FillStyle = vbSolid
FillColor = vbYellow
Line (3700, 6000)-(5500, 3500), , B ‘Это прямоугольник
'FillColor = RGB(220, 220, 220)
FillColor = vbMagenta
DrawWidth = 5
ForeColor = vbYellow
Circle (1000, 5000), 250 ', vbBlack
PSet (1000, 5000), vbBlack
Line (1000, 6000)-(3000, 6700), vbGreen
End Sub
Пример 6.4. Стандартные фигуры, прямоугольник внутри круга. Сканирование заданной области внутри круга с целью перекрашивания прямоугольника.
Private Sub Command1_Click()
'Пример 6_4
Dim i As Integer: Dim x As Integer: Dim y As Integer
Form1.BackColor = vbBlue 'Синий фон
DrawWidth = 3
Circle (1000, 5000), 250 ', vbBlack - маленький круг для ориентировки на форме
ForeColor = vbRed ‘Цвет линий
FillStyle = vbSolid ‘Сплошная заливка фигуры
FillColor = vbYellow ‘Цвет заливки желтый
Circle (4500, 5500), 3000 ‘Рисунок окружности
ForeColor = vbGreen
FillStyle = vbSolid
FillColor = vbWhite
Line (3700, 3500)-(5500, 6000), , B ‘ Прямоугольник, белый внутри
'PSet (3000, 3000) 'Пробная точка для определения координат
'PSet (6000, 3000)
'PSet (3000, 7000)
'FillColor = RGB(220, 220, 220) ‘Серая заливка
'DrawWidth = 5 ‘Толщина линий
i = 1
For x = 3000 To 6000 Step 40
For y = 3000 To 7000 Step 40
If i < 8 Then i = i + 1 Else i = 1
R = i * 40
'Меняется цвет точки, если она не желтая (65535),
'то есть находится внутри прямоугольника
'If Point(x, y) <> 65535 Then PSet (x, y), vbRed
'If Point(x, y) <> 65535 Then PSet (x, y), y
If Point(x, y) <> 65535 Then PSet (x, y), RGB(i * 2, (8 - i) * 30, R)
Next y
Next x
Print "====================="
End Sub