Commit 030292c9 authored by AVPetukhov's avatar AVPetukhov
Browse files

Upload New File

parent 1a59f5de
import math
#Родительский класс
class TAObject:
#Конструктор родительского класса
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
self.f = False
#Геттеры для координат
@property
def getX(self):
return self.x
@property
def getY(self):
return self.y
@property
def getF(self):
return self.f
#Свойства
class TLA(TAObject):
#Конструктор родительского класса ЛА
def __init__(self, x, y, v, xc, yc):
super().__init__(x, y)
self.xc = xc
self.yc = yc
self.v = float(v)
self.landing = False
self.update()
#свойства посадки
@property
def getL(self):
return self.landing
@getL.setter
def getL(self, new):
self.landing = new
#Виртуальный метод для рассчета движения
def move(self, a):
if (a == 1):
self.f = True
if (a == 0):
self.f = False
self.update()
#Метод обновления характеристик
def update(self):
self.R = math.sqrt(((self.x - self.xc) ** 2) + ((self.y - self.yc) ** 2))
if self.x > self.xc:
b = 0
elif self.x < self.xc and self.y < self.yc:
b = -1
elif self.x < self.xc and self.y > self.yc:
b = 1
self.fi = b * math.pi + math.atan((self.y - self.yc)/(self.x - self.xc))
#Самолёт
class TAircraft(TLA):
def move(self, t, a):
super().move(a)
w = -1 * self.v / self.R
self.x = -1 * (self.xc + (self.R * math.cos(self.fi + (w * t)))) * (a-1) + a * (self.x + (self.v * dt))
self.y = -1 * (self.yc + (self.R * math.sin(self.fi + (w * t)))) * (a-1) + a * self.y
#Вертолет
class THelicopter(TLA):
def move(self, t, a):
super().move(a)
self.x = self.x - (a * self.v * math.cos(self.fi) * dt)
self.y = self.y - (a * self.v * math.sin(self.fi) * dt)
#print(str(self.x) + " " + str(self.y))
#Аэропорт
class TAirport(TAObject):
#Конструктор аэропорта
def __init__(self, x, y, l, LA):
super().__init__(x, y)
k = 1
self.l = l
self.LA = LA
#Работа аэропорта
def do(self, t0, tk):
file = open("landtime.txt", "w")
k = 0
eX = self.x + 1.1 * self.l
while t0 < tk:
self.f = False
for tla in self.LA:
if tla.getL:
continue
if isinstance(tla, TAircraft):
if not(self.f and not(tla.getF)) and tla.getX < eX and math.fabs(tla.getY - self.y) < self.l/50:
a = 1
else:
a = 0
tla.move(t0, a)
if tla.getX > self.x + self.l and tla.getF == True:
self.f = True
tla.getL = True
k += 1
file.write("Номер ЛА: " + str(self.LA.index(tla) + 1) + ", Порядок посадки - " + str(k) + ", самолёт\n")
else:
if not(self.f and not(tla.getF)):
a = 1
else:
a = 0
tla.move(t0, a)
if (tla.getX - self.x) ** 2 + (tla.getY - self.y) ** 2 < (self.l / 50) ** 2 and tla.getF == True:
self.f = True
tla.getL = True
k += 1
file.write("Номер ЛА: " + str(self.LA.index(tla) + 1) + ", Порядок посадки - " + str(k) + ", вертолёт\n")
t0 += dt
file.close()
print("finish")
#Основной метод
print("Моделирование работы аэропорта")
print("Введите длину ВПП аэропорта")
length = float(input())
print("Введите координату X аэропорта")
xc = float(input())
print("Введите координату Y аэропорта")
yc = float(input())
print("Введите время начальное (t0)")
tnach = int(input())
print("Введите время конечное (tk)")
tkon = int(input())
print("Введите шаг времени (dt)")
dt = int(input())
LAlist = []
print("Введите характеристики ЛА через пробел (H/A, X, Y, V). После отправки всех ЛА, отправьте пустую строку")
while True:
LAstring = input()
if LAstring == "":
break
else:
LAmass = LAstring.split()
if LAmass[0] == "H":
newLA = THelicopter(LAmass[1], LAmass[2], LAmass[3], xc, yc)
else:
newLA = TAircraft(LAmass[1], LAmass[2], LAmass[3], xc, yc)
LAlist.append(newLA)
aip = TAirport(xc, yc, length, LAlist)
aip.do(tnach, tkon)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment