Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np # мадуль для массива
- import matplotlib.pyplot as plt # для графиков
- step = 1 # шаг
- end = 100 # сторона треугольника
- def makeTryAngl(step, end_): # создает все точки на треугольнике формат Дюваля массив []
- arTotal = []
- for i in np.arange(0, end_+1, step):
- for j in np.arange(0, end_+1, step):
- x = end_ - round(i,1)
- y = round(j,2)
- bary = end_-x-y
- if bary >= 0:
- x = end_ - round(i,1)
- y = round(j,2)
- z = end_ - x - y
- arTotal.append([x,y,z])
- return arTotal
- def DuvToCoor(TryAngl): # меняет формат точек из дюваля в классический (Х и У) формат массив
- Draw = []
- for item in TryAngl:
- y = item[1]*3**0.5/2
- x = end - item[0] - item[1]*0.5
- Draw.append([x,y])
- return Draw
- def CATsection(TryAngl, x1,x2, y1,y2, z1,z2): # вырезает куски графика где x1 начало х2 конец
- leg=[]
- for item in TryAngl:
- if (item[0] >= x1 and item[0] <= x2) and (item[1] >= y1 and item[1] <= y2) and (item[2] >= z1 and item[2] <= z2):
- leg.append(tuple(item))
- return set(leg)
- def graf(TryAngl, color_="none"): # отрисовывет на графике массив точек
- font1 = {'family':'serif','color':'blue','size':20}
- font2 = {'family':'serif','color':'darkred','size':15}
- plt.title("DuvalTriAngle", fontdict = font1)
- plt.xlabel("C2H2", fontdict = font2)
- plt.ylabel("CH4", fontdict = font2)
- z = 3**0.5/2; p = 5
- # os Y
- plt.text(0, 10*z, "10"); plt.text(p, 20*z, "20"); plt.text(2*p, 30*z, "30")
- plt.text(3*p, 40*z, "40"); plt.text(4*p, 50*z, "50"); plt.text(5*p, 60*z, "60"); plt.text(6*p, 70*z, "70")
- plt.text(7*p, 80*z, "80"); plt.text(8*p, 90*z, "90"); plt.text(9*p, 101*z, "100");
- # os Z
- plt.text(102-p, 10*z, "90"); plt.text(100-2*p, 20*z, "80"); plt.text(100-3*p, 30*z, "70")
- plt.text(100-4*p, 40*z, "60"); plt.text(100-5*p, 50*z, "50"); plt.text(100-6*p, 60*z, "40")
- plt.text(100-7*p, 70*z, "30"); plt.text(100-8*p, 80*z, "20"); plt.text(100-9*p, 90*z, "10");
- #Ось X
- ds=-3.5
- plt.text(-3, ds, "0"); plt.text(10, ds, "10"); plt.text(20, ds, "20")
- plt.text(30, ds, "30"); plt.text(40, ds, "40"); plt.text(50, ds, "50"); plt.text(60, ds, "60")
- plt.text(70, ds, "70"); plt.text(80, ds, "80"); plt.text(90, ds, "90"); plt.text(100, ds, "100");
- Draw = DuvToCoor(TryAngl)
- frame = plt.gca()
- frame.axes.get_xaxis().set_ticks([])
- frame.axes.get_yaxis().set_ticks([])
- plt.yticks(rotation=-30)
- plt.tick_params(axis='y', which='both', labelleft=False, labelright=True)
- x1, y1 = zip(*Draw); x1 = list(x1); y1 = list(y1)
- if color_ == "none":
- plt.plot(x1, y1)
- else:
- plt.plot(x1, y1, color = color_)
- def grafPtr(x,y,z): # отрисовывет на графике точку
- pp = 100/(x+y+z)
- Draw = DuvToCoor([[x*pp,y*pp,z*pp]])
- x1, y1 = zip(*Draw); x1 = list(x1); y1 = list(y1)
- plt.plot(x1, y1,color = "black", marker = "o", linestyle= "--", linewidth = 1, markersize = 10)
- TryAngl = makeTryAngl(step, end) # все точки в треугольнике Дюваля формат массив
- copy = CATsection(TryAngl, 0,100, 0,100, 0,100) # копия всех почек в формате set{}
- D1 = CATsection(TryAngl, 14,100, 0,100, 0,23) # Частичный разряд (ЧР)
- PD = CATsection(TryAngl, 0,100, 98,100, 0,100) # Частичный разряд (ЧР)
- T1 = CATsection(TryAngl, 0, 4, 0, 98, 0, 20) # Тепловое повреждение (Т1) возникает в масле и (или) в бумаге при температуре ниже 300 °С
- T2 = CATsection(TryAngl, 0, 4, 0, 100, 20, 50) # Тепловое повреждение (Т2) возникает в масле и (или) в бумаге при температуре выше 300 °C и ниже 700 °C
- T3 = CATsection(TryAngl, 0, 15, 0, 100, 50, 100) # Тепловое повреждение (Т3) возникает в масле и (или) в бумаге при температуре выше 700 °C с явными признаками карбонизации масла, окрашивания металла (при 800 °C) или плавления металла (при температуре ниже 1000 °C).
- D2_1 = CATsection(TryAngl, 15, 100, 0, 100, 23, 40) # Разряды низкой энергии (D2) составной
- D2_2 = CATsection(TryAngl, 29, 100, 0, 100, 40, 100) # Разряды высокой энергии (D2) составной
- DT_1 = CATsection(TryAngl, 14,29, 0,100, 50,100) # Сочетание тепловых повреждений и разрядов составной
- DT_2 = CATsection(TryAngl, 4,29, 0,100, 40,50) # Сочетание тепловых повреждений и разрядов составной
- DT_3 = CATsection(TryAngl, 4,14, 0,100, 0,40) # Сочетание тепловых повреждений и разрядов составной
- ArAll = [D1, PD, T1, T2, T3, D2_1, D2_2, DT_1, DT_2, DT_3]
- AllName = ['D1', 'PD', 'T1', 'T2', 'T3', 'D2', 'D2', 'DT', 'DT', 'DT']
- #graf(TryAngl)
- def ALL():
- graf(D2_1,'orange')
- graf(D2_2, 'orange')
- graf(T3, "#f3f")
- graf(T2, '#f00')
- graf(T1, "#3fc")
- graf(PD, "#099")
- graf(D1, "#666")
- graf(DT_1, '#75ff89')
- graf(DT_2, '#75ff89')
- graf(DT_3, '#75ff89')
- def Find(C2H2,CH4,C2H4, ArAll, AllName):
- j=0
- pp = 100/(C2H2+CH4+C2H4)
- C2H2 = round(C2H2*pp, 0)
- CH4 = round(CH4*pp, 0)
- C2H4 = round(C2H4*pp, 0)
- for i in ArAll:
- if(C2H2,CH4,C2H4) in i:
- print(AllName[j])
- j+=1
- while True:
- ALL()
- C2H2 = float(input('C2H2 = '))
- CH4 = float(input('CH4 = '))
- C2H4 = float(input('C2H4 = '))
- if C2H2+CH4+C2H4==0:
- print("Сумма газов не может быть равна 0")
- continue
- Find(C2H2,CH4,C2H4, ArAll,AllName)
- grafPtr(C2H2,CH4,C2H4)
- plt.show()
Add Comment
Please, Sign In to add comment