Расчет начальных координат объектов Raketa и Sputuik

Алгоритмизация и программирование управления моментом старта и вектором скорости ракеты; перехват спутника, летящего по круговой орбите. Вычисление команды на перемещение объекта Raketa и координат объекта Sputnik; реализация контакта между объектами.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.02.2014
Размер файла 17,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования Российской Федерации

АНО

Международный институт «ИНФО-Рутения»

Московский государственный институт стали и сплавов

Курсовая работа

по курсу: Алгоритмизация и программирование

Тема:

Расчет начальных координат объектов Raketa и Sputuik

г. Боровичи

Задание

Перехват спутника ракетой. Спутник летит по круговой орбите слева направо. Ракета стартует из левого нижнего угла экрана. Управление моментом старта и вектором скорости ракеты (скорость постоянна)

Ракета стартует из левого нижнего угла экрана. Спутник летит слева направо, начиная с левого верхнего угла экрана по круговой орбите с центром в левом нижнем углу экрана и радиусом равным высоте экрана. Спутник изображен в виде вытянутого треугольника. Ракета имеет рисунок в форме стрелки и управляется под действием нажатия стрелок (LEFT или RIGHT - поворот влево или вправо). При контакте (определяется по расстоянию между объектами) спутник распадается на фрагменты в виде кружков.

DECLARATE SUB comm (vs, da, ar, com$)

вычисление команды на перемещение объекта Raketa

DECLARATE SUB coord (v, ar, dt, x, y)

вычисление новых координат объекта Raketa

DECLARATE SUB angle (ar, ang$)

вычисление угла разворота объекта Raketa

DECLARATE SUB Raketa (d$, x, y, ang$, ar, xc.yc, r, st)

перемещение объекта Raketa

DECLARATE SUB coord (x1, y1, t, dt, vx, vy, ang1$)

вычисление новых координат объекта Sputnik

DECLARATE SUB Sputnik (x1, y1, st, do$, ang1$)

перемещение объекта Sputnik

DECLARATE SUB contact (xc, yc, st, x1, y1)

реализация контакта между объектами

SCREEN 9. WINDOWS (0, 0)-(800, 600). COLOR, 1

назначение синего цвета фона

t = 0: dt = 1

назначение отсчета текущего времени t интервалом dt

х = 0: у = 0

назначение начальной точки рисования объекта Raketa

v=10: vs=0

значение скорости ракеты постоянно и интервал изменения скорости равен нулю

ar=-1.5708: da=.15

начальное значение угла разворота ar объекта Raketa в радианах и интервал изменения угла da

d$ = “bu20 e15 r5 f15 d20 y17 g17 u20 br5

макет рисунка объекта Raketa (строка оператора DRAW без символов закрашивания фигуры)

х1 = 0: y1=600

начальные координаты спутника

ar1 = -1.5708: da1 =.1

начальное значение угла ar1 расположения объекта Sputnik в радианах и величины изменения угла da1 при перемещении объекта Sputnik за 1 цикл

vx = 5: vy = 0

начальное значение компонент вектора скорости объекта Sputnik

do$ = “u10 m+59,10 m-50,10 u10 br5”

макет рисунка объекта Sputnik

r = 100

константа для вычисления контрольной точки контакта объектов

sr = 0

флаг, принимающий значение 1 при наличии контакта DO

начало цикла движения объектов

t = t + dt

счетчик времени

i = i + 1

счетчик цикла

angl = da1 * i

расчет угла поворота объекта Sputnik

x1 = -600 * sin (ang1)

y1 = 600 * cos (ang1)

расчет новых координат объекта Sputnik

vy = 5 * sin (ang1)

vx = -5 * cos (ang1)

расчет текущих значений вектора скорости объекта Sputnik

CALL comm(x1, y1, t, dt, i, vx, vy, ang1$)

расчет координат объекта Sputnik

CALL comm(vs, da, v, ar, com$)

определение команды на перемещение объекта Raketa (переменной com$ присваивается символ нажатой клавиши)

CALL coord(v, ar, dt, x, y)

расчет новых координат объекта Raketa

CALL angle(ar, ang$)

расчет угла разворота объекта Raketa

CALL ракета (d$, x, y, ang$, ar, xc, yc, r, st)

перемещение рисунка объекта Raketa

IF com$ = “s” OR st > 0 THEN EXIT DO

окончание работы программы (выход из цикла DO-LOOP) производится по одному из двух условий: либо нажата клавиша s, либо st = 1 (что означает наличие контакта)

CALL contact (xc, yc, st, x1, y1)

вычисление условий контакта путем сравнения координат контрольной точки (хс, ус) объекта Raketa и координат начальной точки рисования (xl, yl) объекта Sputnik

LOOP

конец цикла движения объектов

END

SUB angle (ar, ang$)

пересчет угла в радианах аr в угол в градусах ang$, требуемый оператором DRAW

pi = 3.1415

число р

ad = INT(ar * 180 / pi)

угол в градусах в числовой форме

ad$ = $(ad)

угол в градусах в символьной форме

IF ad >= 0 THEN adS = "+" + LTRIM$(RAK$(ad))

при положительном угле символ «+» будет отсутствовать, а он нужен в строке оператора DRAW, поэтому он добавляется

ang$ = "ta" + ad$

формирование фрагмента строки оператора DRAW END SUB

SUB comm (vs, da, v, ar, com$)

pi2 = 6.2830 - число 2р

FOR i = l TO 1000

старт скорость ракета перехват спутник

замедляющий цикл, необходимый для того, чтобы нажатая клавиша была принята оператором INKFY$. Если не нажата ни одна клавиша, значение переменной соm$ равно пустой строке и движение объекта «Ракета» продолжается со старыми значениями параметров v и аг

com$ = INKEY;: IF com; <> "" THEN EXIT FOR

NEXT i

IF RIGHTS(com$, I) = "M" THEN ar = ar - da

нажата клавиша RIGHT, угол уменьшился

IF RIGHTS(com$, 1) = "К" THEN ar = ar + da

нажата клавиша LEFT, угол увеличился

IF ar > pi2 THEN ar = ar - pi2

контролируется полный оборот, так как значение угла не может превышать 2р по модулю

IF ar < -pi2 THEN ar = ar + pi2 IF v > 0 THEN SOUND 37 + v * 500, .1

при увеличении скорости увеличивается частота сопровождающего звука. END SUB

SUB contact (хс, ус, st, xl, yl

расчет условия контакта

DIM xo(10), yo(10), dxo(10), dyo(10)

dist = SQR((x 1 - хс)^2 + (yl - ус)^2)

расчет расстояния между объектами

IF dist < 50 THEN

при расстоянии меньше 50 пикселов фиксируется контакт (флаг st равен. единице) st = 1

RANDOMIZE TIMER

FOR i = l TO 10

расчет начальных координат фрагментов объекта Sputuik

xo(i) = x1: yo(i) = yl

dxo(i) = 10 * RND: dyo(i) = 20 * RND

NEXT i

DO

FOR i=l TO 10

изображение фрагментов в виде разлетающихся белых кружков радиуса 5 пикселов (приращения координат их центров случайны, поэтому каждый кружок перемещается в своем направлении)

xo(i) = xo(i) + dxo(i): yo(i) = yo(i) + dyo(i)

CIRCLE (xo(i), yo(i)), 5

NEXT i

LOOP WHILE xo(1) < 1000 OR yo(1) < 750

движение фрагментов прекращается, когда первый фрагмент достигнет границы экрана

END IF

END SUB

SUB coord (v, ar, dt, x, y)

координаты х и у объекта Raketa рассчитываются по законам механики

dx = -v * SIN(ar) * dt: dy = v * COS(ar) * dt

x = x + dx: у = у + dy

END SUB

SUB coord 1 (xl, yl, t, dt, i, vx, vy, angl$)

расчет координат движения объекта Sputnik х1 и у1 (рассчитываются

по законам механики)

x1 = 600 * sin (ang1)

y1 = 600 * cos (ang1)

рассчитываются координаты объекта Sputnik

vy = 5 * SIN(ang1)

vx = 5 * COS(ang1)

расчет текущих значений вектора скорости угол разворота фигуры спутника равен ang1 за i циклов объекта

Sputnik

angl$ = "ta" + ad$

формирование фрагмента строки для оператора DRAW. END SUB

SUB RAKETA (d$, x, y, ang$, ar, xc, yc, r, st)

рисунок объекта RAKETA

PRESET (x, y)

фиксация точки начала рисования

figpnt$ = "сЗ" + ang$ + d$ + "p5,3 b15"

формирование строки рисунка (строка собрана из символа цвета 3, угла разворота, макета рисунка, символов внутренней окраски)

DRAW figpnt$

рисование фигуры объекта RAKETA

PRESET (x, y)

вторичная фиксация начальной точки (необходима, так как последняя точка рисунка может не совпасть с начальной точкой -- а от нее рассчитываются координаты нового положения фигуры)

FOR i = l TO 30000: NEXT i

замедляющий цикл позволяет задержать изображение объекта на время, необходимое для глаза, перед тем, как стереть его

figdel$ = "с0" + d$ + "р0,0 b15"

формирование строки оператора DRAW для стирания фигуры объекта (рисование цветом фона - при указании цвета ноль оператор DRAW воспринимает цвет фона, каким бы он не был назначен в операторе COLOR)

DRAW figdel$

стирание объекта RAKETA

PRESET (x, у)

возвращение начальной точки dar = 1.27

угол в радианах, необходимый для расчета координат контактной точки (хс, ус) (эта точка находится прямо по курсу объекта перед ним на близком расстоянии - сделано это по той причине, что точка с координатами (х, у) находится в хвосте и неудобно по ней фиксировать контакт)

хс = х + r * COS(ar + dar): ус = у + r * SIN(ar + dar)

расчет координат хс и ус

PSET (х, у) ставится точка белым цветом, которая не стирается и изображает шлейф от движения объекта

IF st > 0 THEN DRAW figpnt$

восстановление рисунка объекта, который в момент контакта оказывается стертым. END SUB

SUB Sputnik (xl, yl, st, do$, angl$)

рисунок объекта Sputnik

IF st = 0 THEN

PRESET (xl,yl)

фиксация начальной точки рисования

figpnt$ = "с12" + angl$ + do$ + "p14,12 b15"

формирование строки оператора DRAW с окраской и заданным углом разворота

DRAW figpnt$

рисование фигуры объекта Sputnik PRESET (xl.yl), возврат начальной точки

OR i = 1 ТО 30000: NEXT i

замедляющий цикл для фиксации объекта на экране

figdel$ = "с0" + do$ + "р0,0 b15"

формирование строки стирания объекта Sputnik

DRAW figdel$

стирание объекта Sputnik

PRESET (xl, yl)

возврат начальной точки (если ее не возвращать, то может появиться эффект размазывания фигуры объекта)

END IF

END SUB

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.