Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math as m
- h = -2
- initialFuelMass = 1000
- g = 1.62
- mass = 2150
- fuelV = 3660
- amax = 29.43
- Vymax = 3
- Vxmax = 1
- def simulateStep(x, y, vx, vy, fuelMass, command):
- alpha, fuelConsumption, dt = command
- if fuelConsumption * dt > fuelMass:
- print('Не хватит топлива')
- ax = fuelV * m.sin(m.radians(alpha)) * fuelConsumption / (mass + fuelMass)
- ay = -g + fuelV * m.cos(m.radians(alpha)) * fuelConsumption / (mass + fuelMass)
- a = m.hypot(ax, abs(ay) - g)
- if a > amax:
- print('Ускорение больше разрешимого')
- x += dt * (vx + ax * dt / 2)
- y += dt * (vy + ay * dt / 2)
- vx += ax * dt
- vy += ay * dt
- if (abs(x) < 5 and y <= 0) or (abs(x) >= 5 and y <= h):
- if abs(vx) > Vxmax or abs(vy) > Vymax:
- print('Рокета разобьётся')
- y = 0 if abs(x) < 5 else h
- fuelMass -= fuelConsumption * dt
- return x, y, vx, vy, fuelMass
- x, y = 0, 0
- vx, vy = 0, 0
- fuelMass = initialFuelMass
- dt = 0.1
- f = open('Полёт корабля.txt', 'w')
- # Подъём и разгон
- time = 0
- alpha = 45
- fuelConsumption1 = 18
- fuelConsumption = fuelConsumption1
- while fuelMass > initialFuelMass * 0.47:
- x, y, vx, vy, fuelMass = simulateStep(x, y, vx, vy, fuelMass, (alpha, fuelConsumption, dt))
- time += dt
- print('liftoff::\t', 'x:', round(x), '\ty:', round(y), '\tvx:', round(vx), '\tvy:', round(vy), '\tfuel:',
- round(fuelMass))
- f.write(f'liftoff::\t vx: 0\t vy: 0\t x: 0\t y: 0\t '
- f'alpha: {round(alpha)}\t consumption: {fuelConsumption}\t time: {round(time, 1)} \n')
- # Свободное падение
- f.write(f'freefall::\t vx: {round(vx, 1)}\t vy: {round(vy, 1)}\t x: {round(x)}\t y: {round(y)}\t '
- f'alpha: 0\t consumption: 0\t')
- time = 0
- engineAltitude = y
- while y - h > engineAltitude or vy > 0:
- x, y, vx, vy, fuelMass = simulateStep(x, y, vx, vy, fuelMass, (alpha, 0, dt))
- time += dt
- print('freefall::\t', 'x:', round(x), '\ty:', round(y), '\tvx:', round(vx), '\tvy:', round(vy), '\tfuel:',
- round(fuelMass))
- f.write(f'time: {round(time, 1)} \n')
- # Торможение
- f.write(f'slowdown::\t vx: {round(vx, 1)}\t vy: {round(vy, 1)}\t x: {round(x)}\t y: {round(y)}\t')
- time = 0
- _fuelConsumptionThree = 16
- fuelConsumption = _fuelConsumptionThree
- while y > 100:
- x, y, vx, vy, fuelMass = simulateStep(x, y, vx, vy, fuelMass, (-alpha, fuelConsumption, dt))
- time += dt
- print('slowdown::\t', 'x:', round(x), '\ty:', round(y), '\tvx:', round(vx), '\tvy:', round(vy), '\tfuel:',
- round(fuelMass))
- f.write(f'alpha: {-alpha}\t consumption: {fuelConsumption}\t time: {round(time, 1)} \n')
- # Приземление
- f.write(f'landing::\t vx: {round(vx, 1)}\t vy: {round(vy, 1)}\t x: {round(x)}\t y: {round(y)}\t')
- time = 0
- YFuelConsumption = 9.8
- XFuelConsumption = 10.1
- fuelConsumption = m.hypot(YFuelConsumption, XFuelConsumption)
- alpha = round(-90 + m.degrees(m.atan(YFuelConsumption / XFuelConsumption)))
- while y > h:
- x, y, vx, vy, fuelMass = simulateStep(x, y, vx, vy, fuelMass, (alpha, fuelConsumption, dt))
- if (abs(vy) + m.sqrt(2 * g * (y - h)) < Vymax) and (abs(vx)<Vxmax):
- fuelConsumption = 0
- print('stop engine')
- time += dt
- print('landing::\t', 'x:', round(x), '\ty:', round(y), '\tvx:', round(vx), '\tvy:', round(vy), '\tfuel:',
- round(fuelMass))
- f.write(f'alpha: {round(alpha)}\t consumption: {fuelConsumption}\t time: {round(time, 1)} \n')
- f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement