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

 

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

АНО

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

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








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

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

Тема:

Расчет начальных координат объектов 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)

перемещение объекта RaketaSUB coord (x1, y1, t, dt, vx, vy, ang1$)

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

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

перемещение объекта SputnikSUB 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)= 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$)= 6.2830 - число 2?i = l TO 1000

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

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


com$ = INKEY;: IF com; <> "" THEN EXIT FORiRIGHTS(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(i) = 10 * RND: dyo(i) = 20 * RNDii=l TO 10


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


xo(i) = xo(i) + dxo(i): yo(i) = yo(i) + dyo(i)(xo(i), yo(i)), 5iWHILE xo(1) < 1000 OR yo(1) < 750


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


END IFSUBcoord (v, ar, dt, x, y)


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


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


END SUBcoord 1 (xl, yl, t, dt, i, vx, vy, angl$)

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

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


x1 = 600 * sin (ang1)= 600 * cos (ang1)


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


vy = 5 * SIN(ang1)

vx = 5 * COS(ang1)


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


Sputnik

angl$ = "ta" + ad$


формирование фрагмента строки для оператора DRAW. END 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

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

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


IF st = 0 THEN (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 IFSUB


Министерство образования Российской Федерации АНО Международный институт «ИНФО-Рутения» Московский государственный институт стали и сплавов

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ