В результате выполнения цикла получаем изображение эллипса, у которого большая полуось равна 90,а малая 50, и смещённым относительно левого верхнего угла объекта Picture1 на 200 пикселей влево и 140 – вниз.
С помощью метода PSet рисуются точки на осях абсцисс и ординат, задающие единичный отрезок. Масштаб задан следующий 360 пикселей = 100 метров. Таким образом, для пользователя большая полуось будет составлять 45 метров, а меньшая – 50 метров.
При нажатии на командную кнопку Command1 проверяется условие если Slider1.Value = 0, таймер, организующий движение объекта не включается (Timer1.Enabled = False) так как это означает, что скорость равна нулю. Во всех остальных случаях таймер включается (Timer1.Enabled = True).
При нажатии на командную кнопку Command2 таймеры Timer1 и Timer2 выключаются Timer1.Enabled = False: Timer2.Enabled = False, что приводит к остановке движения тела и остановке отсчёта времени.
Теперь последовательно рассмотрим программный код процедур Timer1_Timer() и Timer2_Timer().
С помощью объекта Timer1, организуется движение объекта. В первую очередь активируется Timer1. Затем рассчитываются координаты объекта Shape1 по формулам
x = 180 * Cos(fi) + 200
y = 100 * Sin(fi) + 140
Формулы совпадают с формулами, по которым происходила прорисовка эллипса, это обеспечивает то, что объект движется по траектории, совпадающей с эллипсом. После того как координаты рассчитаны, они присваиваются свойствам Left и Top объекта Shape1, определяющих положение объекта на объекте Picture1. Также координаты выводятся в соответствующие метки на форме LabelX.Caption = (x - 20) \ 4: LabelY.Caption = (240 - y) \ 4.
Переменная fi изменяется по закону fi = fi + (Slider1.Value / 2) * 3.1415 / 180, т.е. угол разбиения, а следовательно и скорость объекта Shape1, зависит от свойства Value, объекта Slider1, иначе говоря от положения бегунка.
Число полных кругов, пройденных объектом Shape1, рассчитывается по формуле k = Int(fi / 6.28), и после расчёта выводится в соответствующую метку LabelK.Caption = k.
Пройденный телом путь, рассчитывается по формуле S = Round(223.112 / 6.28 * fi).
Число 223.112 – это длина эллипса в метрах, рассчитана с помощью определённого интеграла:
4*
.После расчёта значение выводится в соответствующую метку LabelS.Caption = S.
Свойство Interval объекта Timer1, равно 1, это значит, что все описанные выше действия повторяются 1 раз в миллисекунду. Величина интервала подобрана опытным путём.
В программном коде процедуры Timer2_Timer() осуществляется подсчёт времени, по формуле LabelTime.Caption = LabelTime.Caption + 0.1,а свойство Interval объекта Timer2 равно 100, что обеспечивает отсчёт времени в секундах, с точностью до десятых.
Скорость объекта Shape1, рассчитывается по формуле v = (Sqr((x2 - x) ^ 2 + (y2 - y) ^ 2)) / (Timer2.Interval) * 1000. Расстояние между двумя соседними точками определяется как корень квадратный из суммы квадратов разностей координат этих точек, и делится на время, т.е интервал таймера Timer1.
3. Разработка блок-схемы
Представим графический алгоритм, в виде блок-схемы, для процедуры Private Sub Timer1_Timer(), отвечающей за передвижение тела по эллиптической траектории.
4. Текст программы на VB
Dim fi As Double 'угол'
Dim x As Integer 'текущая координата Х
Dim y As Integer 'текущая координата Y
Dim x2 As Integer
Dim y2 As Integer
Dim v As Single 'скорость тела
Private Sub Command1_Click()
If Slider1.Value = 0 Then Timer1.Enabled = False Else Timer1.Enabled = True 'при нажатии на СТАРТ если скорость установлена 0,тело не движется
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False 'кнопка СТОП.Движение тела и отсчёт времени прекращается.
Timer2.Enabled = False
End Sub
Private Sub Form_Load()
Picture1.DrawWidth = 8 'устанавливается толщина линии 8 пикселей
For i = 0 To 360
Picture1.PSet (180 * Cos(i) + 200, 100 * Sin(i) + 140) 'при помощи метода PSet рисуется эллипс
Next
Shape1.Left = -20 'координаты объекта при загрузке формы,таковы,что объект отсутствует на форме
Shape1.Top = -20
fi = 0
Picture1.PSet (380, 240) 'точки на осях x и y,единичный отрезок
Picture1.PSet (20, 40)
End Sub
Private Sub Timer1_Timer()
If Not Timer2.Enabled Then Timer2.Enabled = True
x = 45 * 4 * Cos(fi) + 48 * 4 'траектория движения тела, координаиа Х
y = 25 * 4 * Sin(fi) + 33 * 4 'Y
Shape1.Left = x
Shape1.Top = y
LabelV.Caption = Round(v, 3) 'вывод значения скорости в метку,точность до тысячных
LabelX.Caption = x 'вывод координат в метки
LabelY.Caption = y
LabelK.Caption = Int(fi / 6.28) 'количество кругов
LabelS.Caption = Round(223.112 / 6.28 * fi) 'пройденный путь
fi = fi + (Slider1.Value / 2) * 3.1415 / 180 'закон изменения угла разбиения
End Sub
Private Sub Timer2_Timer()
LabelTime.Caption = LabelTime.Caption + 0.1 'время
v = (Sqr((x2 - x) ^ 2 + (y2 - y) ^ 2)) / (Timer2.Interval) * 1000 'скорость
x2 = x
y2 = y
End Sub
5. Контрольный пример
6. Инструкция пользователя
Данная программа является графической визуализацией движения объекта по эллиптическому маршруту, с регулируемой скоростью.
Запустите файл ”Project1.exe”. На экране появится форма, большую её часть занимает рамка с изображением прямоугольной системы координат и изображённого в ней эллипса. При нажатии на кнопку «Старт», появляется объект в виде небольшого круга, движущегося по траектории, обозначенной эллипсом. В окошках, расположенных на форме слева указываются параметры движения тела: координаты, количество полных пройденных кругов, общий пройденный путь и скорость. Скорость тела регулируется с помощью бегунка, расположенного внизу формы. Процесс движения можно остановить, нажав на кнопку «Стоп», при повторном нажатии на «Старт» тело продолжит движение при этом характеристики движения не обнулятся, и их отсчёт будет продолжен с момента остановки. Для выхода из программы нажмите на кнопку с крестиком в верхнем правом углу окна.
Список использованной литературы
1. А.Г. Паутова. Visual Basic Творческое проектирование. В 3 ч. – М.: Классикс Стиль, 2003. – 128 с.
2. Марченко А.Л. «Введение в программирование»: Учебное пособие. - Московский университет, 2005. – 258 с.
3. Либерти Д. «Программирование на VB»: Пер. с англ. – 2-ое изд.- Сивол-Плюс, 2004. – 688 с.
4. Мультимедийное пособие «Программирование для студентов», Alex Soft.