100 q = 0.0001
t = t + q
s = v * t * Cos(f) * 2
h = (v * t * Sin(f) - (g * t ^ 2) / 2) * 5.5
Line (X2, Y2)-(x0 + s, y0 - h), 14
X2 = x0 + s
Y2 = y0 - h
If h < 0 Then GoTo 200
GoTo 100
200 End Sub
Значение координат х0 и у0 (начальная точка старта) подбираются индивидуально.
В целом, на этом, задачу можно считать выполненной. На Рис.8 и Рис.9 отображен общий вид формы.
Для большей наглядности можно вести еще ряд элементов, изменить цвет, ввести коэффициент сопротивления воздуха. Как вариант, в приложении 2 показано содержание файла form*.frm , для данного случая, а рис. 10 и рис. 11 отображает общий вид формы.
Рис. 8.
Рис. 9
Рис. 10
Рис. 11
Использование таймера в VBВ большинстве случаев решаемые задачи в той или иной мере привязаны к реальному времени. В VB так же при решении задач можно использовать время - таймер, причем таймеров может быть несколько, они могут работать как вместе, так и поочередно, при этом один процесс решения может останавливаться, а другой - начинаться.
В предлагаемом примере (Приложение 3), решена задача наведения в ручную ракеты (ПТУРС) на цель. Для решения задачи использованы пять таймеров, причем данное решение не является самым удачным и имеет ряд погрешностей. Но для получения начальных навыков в программировании в VB вполне приемлем. Общий вид формы представлен на Рис. 12.
Рис.12.
Особенностью составления, в этом случае, программы является то, что в самом начале указывается перечень элементов, которые, так или иначе, зависят от таймеров:
Private Sub Form_Load()
Label1.Caption = 0
Label2.Caption = 0
Label3.Caption = 0
Label4.Caption = 0
Label5.Caption = 0
Label6.Caption = 0
Label13.Caption = 0
Label15.Caption = 0
Label17.Caption = 0
End Sub
Первый таймер (Private Sub Timer1_Timer()), запускается сразу после начала программы, так как по умолчанию в свойствах элемента Timer1 в графе interval установлена 1, что соответствует 1мл.сек. При этом положение цели (танка) начинает меняться в соответствию с записью:
Label1.Caption = Label1.Caption + Timer1.Interval
a = Label1.Caption
Timer1 работает до тех пор пока ракета не выйдет за приделы 13000 или не попадет в цель:
If X0 > 13000 Then Timer1.Interval = 0
If Label17.Caption < 150 Then Timer1.Interval = 0
Остальные таймеры в начальный момент отключены, т.е. для каждого таймера в графе interval установлен 0.
Работа таймера 3 начинается после нажатия кнопки ПУСК:
Private Sub Command1_Click()
Rem старт ПТУРС
Timer3.Interval = 1
End Sub
Полет ракеты описывается следующим блоком:
T = Timer3.Interval
Rem Полет ПТУРС
X1 = V * T * Cos(f - Rnd * 0.1)
Y1 = V * T * Sin(f + Rnd * 0.1)
Label5.Caption = (Label5.Caption + X1)
Label4.Caption = (Label4.Caption + Y1)
Label6.Caption = 12000 - a * k
X0 = Label5.Caption
Y0 = -Label4.Caption
Начальный угол стрельбы задается положением скрола и может меняться в пределах от +25 до -15. Положение скрола, по умолчанию, в свойствах установлено как: max 40; value 10.
А строка:
Label3.Caption = (25 - VScroll1)
определяет, что начальный угол стрельбы Label3.Caption =15.
Таймер 2 начинает работать, если высота полета ПТУРС становится меньше -50, т.е. снаряд врезался в землю:
If Y0 > 50 Then Timer2.Interval = 1,
при этом запускается программа взрыва:
Private Sub Timer2_Timer()
Rem: фейерверк
Rem: a угол разлета
Rem: r радиус разлета, n количество осколков
Rem: коэффициенты 1 и 4 определяют ширину и высоту разлета
X1 = Label5.Caption
Y1 = -Label4.Caption
r = 200
n = 500
Dim x(10), y(10)
Randomize (Label2.Caption)
For i = 1 To 2
a = -6.28 * Rnd / 2
rn = r * Rnd
xc = X1 + 400 + rn * 1.5 * Cos(a)
yc = Y1 + 5600 + rn * 5 * Sin(a)
PSet (xc, yc), &HFFFF80 * Rnd + &HC0C0FF * Rnd
Next
If Label1.Caption > 200 Then Timer2.Interval = 0
End Sub
При этом таймер 3 остановится при дальнейшем опускании снаряда до -100:
If Y0 > 100 Then Timer3.Interval = 0
При достижении ракеты цели по дальности:
If Label5.Caption > 11500 - (Label1.Caption) Then Timer4.Interval = 1
начинает работать таймер 4. В этом случае проверяется высота полета, и если она меньше 200 включается таймер 5:
Private Sub Timer4_Timer()
If Label4.Caption < 200 Then Timer5.Interval = 1
End Sub
Запускается программа взрыва:
Private Sub Timer5_Timer()
X0 = Label5.Caption
Y0 = -Label4.Caption
r = 100
n = 100
Dim x(100), y(100)
Randomize (Label2.Caption)
For i = 1 To 5
a = -6.28 * Rnd / 2
rn = r * Rnd
xc = X0 + 400 + rn * 3 * Cos(a)
yc = Y0 + 5600 + rn * 5 * Sin(a)
PSet (xc, yc), &HFFFF80 * Rnd + &HC0C0FF * Rnd
Next
End Sub
И если сохраняется тенденция к снижению снаряда, то таймер 1 останавливается:
If Label17.Caption < 150 Then Timer1.Interval = 0
Цель поражена (Рис.13).
Рис.13
ЗаключениеТаким образом, язык программирования Visual Basic, наглядно позволяет смоделировать физический процесс, получить конкретные результаты и навыки. Отличительной особенностью VB, является возможность работы его непосредственно в среде Windows, что значительно повышает наглядность, красочность программы и гибкость в ее применении.
Необходимо еще раз подчеркнуть, что создаваемые объекты сразу же обеспечены программным кодом и для них приемлем метод перетягивания, что весьма распространено Windows.
Итак, полученные навыки позволят в дальнейшем самостоятельно решать задачи различной сложности, расширить приобретенный опыт и углубить свои знания в вопросах программирования.
Список литературыКравченко В. Программирование. «Компьютерное моделирование движения тел». Учебно – исследовательская работа учащейся 9 класса г. Кунгур 2005 – 30 с.
Дж. Радер., К. Миллсап. Бейсик для персонального компьютера фирмы IBM: Пер. с англ. – М.: Радио и связь, 1991. – 30 л.: ил.
Р. Мкдона. Основы микрокомпьютерных вычислений: Пер. с англ./ Т.Г.Никольской; Под ред. В. Ф. Шальгина. – М.: Высш. Школа., 1989. – 272 с.: ил.
Задачи и упражнения по программированию: Практ. Пособие для ПТУ/ Под ред. А. Я. Савельева. Кн. 2. Тяжелая промышленность и транспорт/ В.Е.Алексеев, А.С. Ваулин. – 2-е изд., доп. – М.: Высш. шк., 1989-112 с.: ил.
А. В. Перышкин., Е. М. Гутник. Физика. 10 кл.: «Учеб. для общеобразоват. учеб. заведений – М.: Дрофа, 2002.
И. Д. Помбрик, Н. А. Шевченко. Аэродинамика. Изд. третье, исправленное и дополненное. М., Военное издательство, 1972 – 96 с.: СПД
Г. И. Светозарова. ОСНОВЫ ПРИКЛАДНОЙ ИНФОРМАТИКИ. Раздел: Описание языка Турбо-Бейсик. Справочное пособие.
http://www.codenet.ru/progr/vbasic/first.php
http://vb.hut.ru/vbnovice/lessons.htm
http://vbzero.narod.ru/loading.htm
http://vbzero.narod.ru/site.htm
http://vbzero.narod.ru/project.htm
http://www.tam.ru/guide/
http://www.codenet.ru/progr/vbasic/menu/vbhelp_01.php
Приложение 1REM ЯДРО
5 INPUT « Ввести угол стрельбы от 5 до 80 град»; a
7 IF a < 5 THEN 10
IF a > 80 THEN 20
GOTO 40
10 INPUT « Угол должен быть >=5»; a
GOTO 7
20 INPUT « Угол должен быть <=80»; a
GOTO 7
40 INPUT « Ввести дальность до цели от 200 до 5000 м»; l
45 IF l < 200 THEN 50
IF l > 5000 THEN 60
GOTO 70
50 INPUT « Расстояние до цели должно быть >=200»; l
GOTO 45
60 INPUT « Расстояние до цели должно быть <=5000»; l
GOTO 45
70 INPUT « Для выстрела нажать F1»; enter
REM построение координат
SCREEN 9:
x0 = 50
y0 = 300
x1 = 600
y1 = 50
x2 = 50
y2 = 300
REM координата Y
LINE (x0, y0)-(x0, y1), 12
LOCATE 18, 4: PRINT “250”
LOCATE 14, 4: PRINT “500”
LOCATE 10, 4: PRINT “750”
LOCATE 6, 4: PRINT “1000”
LINE (48, 245)-(52, 245), 11
LINE (48, 190)-(52, 190), 11
LINE (48, 135)-(52, 135), 11
LINE (48, 80)-(52, 80), 11
REM координата X
LINE (x0, y0)-(x1, y0), 12
LOCATE 23, 19: PRINT “1000”
LOCATE 23, 31: PRINT “2000”
LOCATE 23, 44: PRINT “3000”
LOCATE 23, 56: PRINT “4000”
LOCATE 23, 69: PRINT “5000”
LINE (150, 302)-(150, 298), 11
LINE (250, 302)-(250, 298), 11
LINE (350, 302)-(350, 298), 11
LINE (450, 302)-(450, 298), 11
LINE (550, 302)-(550, 298), 11
REM ЦЕЛЬ
LINE (x0 + l / 10, 299)-(x0 + l / 10 + 5, 299), 10
LINE (x0 + l / 10, 298)-(x0 + l / 10 + 5, 298), 10
REM показания
LOCATE 1, 6: PRINT “V m/s”
LOCATE 2, 6: PRINT “H m”
LOCATE 2, 24: PRINT “S m”
LOCATE 1, 24: PRINT “T s”
80 KEY(1) ON
ON KEY(1) GOSUB 90
GOTO 80
REM полет
90 v = 200
g = 9.8
f = a * 3.14 / 180
100 q = .01
t = t + q
REM k коэффициент сопротивления воздуха
k = .016
vs = v * COS(f) – (k – k / (k + v * COS(f)))
vh = v * SIN(f) – (k – k / (k + v * SIN(f)))
s = vs * t * 2
h = (vh * t – (g * t ^ 2) / 2) * 5.5
v = SQR(vs ^ 2 + vh ^ 2)
LINE (x2, y2)-(x0 + s / 20, y0 – h / 25), 14
x2 = x0 + s / 20
y2 = y0 – h / 25
LOCATE 1, 12: PRINT v
LOCATE 2, 12: PRINT h / 5.5
LOCATE 2, 28: PRINT s / 2
LOCATE 1, 28: PRINT t
IF h < 0 THEN 200
GOTO 100
... широкие возможности по созданию макросов. В ходе написания данной курсовой работы был создан макрос на языке SVB для проверки гипотезы о нормальности остатков регрессии. Необходимость разработки данного приложения связана с особенностями осуществления регрессионного анализа в пакете STATISTICA. Написанный модуль был использован при эконометрическом моделировании вторичного рынка жилья в г. ...
... система Windows и программные продукты Microsoft Office, покорили весь мир. Корпорация Microsoft интегрировала в свои офисные продукты, в саму операционную среду изумительный по простоте и необычайный по своей эффективности язык программирования Visual Basic for Applications или сокращенно VBA. С помощью этого языка теперь каждый пользователь может автоматизировать работу приложения и максимально ...
... учеников 1. Организационный момент Здравствуйте. Сегодня мы будем говорить о том, как работать с графикой при помощи языка программирования Pascal. Вы уже знакомы с различными типами графики. Какие это типы? (растровый и векторный) Как задается графический объект при использовании графики этих типов. Pascal поддерживает вывод на экран и векторной и растровой графики, но мы рассмотри ...
... программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами. Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются лишь для общения людей между ...
0 комментариев