Смекни!
smekni.com

Движение по эллиптическому маршруту с регулируемой скоростью и графической визуализацией процесса (стр. 2 из 2)

В результате выполнения цикла получаем изображение эллипса, у которого большая полуось равна 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.