class Blaster(): import json #Οι τιμές self είναι αυτές που θα πάρει απο το αρχείο .json def __init__(self): self.name = " " # Όνομα εκρηκτικού self.Density = 0 # Πυκνότητα εκρηκτικής ύλης self.Q = 0 # Ενέργεια εκρητικού self.V = 0 # Όγκος αερίων κατα την ανατίναξη του εκρηκτικού self.hdiam=0 # Διάμετρος διατρήματος self.emptyf =0 # Διάμετρος κενού διατρήματος self.width =0 # Πλάτος μετώπου self.abutmentH =0 # Ύψος μετώπου self.archHeight =0 # Ύψος κυκλικού τμήματος οροφής self.a =0 # Γωνιακή απόκλιση self.b =0 # Απόκλιση κολάρου self.c =0 # Σταθερά πετρώματος self.g=0 # Γωνιακή απόκλιση για περιμετρικά διατρήματα self.Sanfo=0 # Γραμμική πυκνότητα εκρηκτικού ως προς ANFO self.hdepth=0 # Βάθος διατρήματος self.advance=0 # Προχώρηση μετώπου self.massph=[] # Λίστα μάζας γόμωσης εκρηκτικού ανά διάτρημα self.total=[] # Συνολική μάζας εκρηκτικών self.charge=[] # Λίστα γραμμικής πυκνότητας γόμωσης φυσιγγίων self.cartridges = [] # Λίστα φυσιγγίων εκρηκτικής ύλης self.B=[] # Λίστα πλευρών τετραγώνων της προεκσκαφής self.practicalb=[] # Λίστα πρακτικών φορτίων self.diam=[] # Λίστα διαμέτρων φυσιγγίων που χρησιμοποιείται σαν τίτλος διατρημάτων στον τελικό πίνακα self.holes=[] # Λίστα αριθμού διατρημάτων για κάθε τμήμα self.number_first=[] self.number_second=[] # Λίστες φυσιγγίων στα διατρήματα του κάθε τμήματος. Χρησιμοποιείται για τον τελικό συγκεντρωτικό πίνακα. self.number_third=[] # π.χ. [4,4.5,0] ποσότητα κάθε φυσιγγίου στα διατρήματα self.number_fourth=[] self.number_lifters=[] self.number_roof=[] self.number_wall=[] self.number_stoping=[] self.spacing=[] # Λίστα με τις αποστάσεις των εκρηκτικών δαπέδου και τοίχου self.No_columns=[] # Ο αριθμός των στηλών διατρημάτων που πρέπει να δημιουργηθούν στα stoping holes self.No_rows=[] # Ο αριθμός των σειρών διατρημάτων που πρέπει να δημιουργηθούν στα stoping holes self.spacing_columns=[] # Η απόσταση μεταξύ των στηλών οριζοντίων διατρημάτων self.spacing_rows=[] # Η απόσταση μεταξύ των οριζοντίων διατρημάτων σε κάθε σειρά self.corner_holes=[] # Η απόσταση των γωνιακών διατρημάτων από τα επόμενα, στα Lifters self.Spacing=[] # Απόσταση στηλών καθέτων διατρημάτων self.cols_downwards=[] # Αριθμός στηλών καθέτων διατρημάτων self.number_stoping1=[] self.number_roof1=[] self.number_lifters1=[] self.test_no=[] self.test_total=[] # Λίστες για τετραγωνική στοά 3.5 m x 4 m !!! ΟΧΙ ΥΠΟΧΡΕΩΤΙΚΟ self.test_mass=[] def addcartridge(self, name, diameter, length): self.cartridges.append({"name":name, "diameter":diameter,"length":length }) # Για κάθε φυσίγγιο εκρηκτικού που δηλώνω στο αρχείο .json, καταχωρούνται οι τιμές του (όνομα, διάμετρος, μήκος) στη λίστα self.cartridges. def charge_concentration(self): for x in self.cartridges: d=x["diameter"] l=round(((math.pi*(d**2))/4)*self.Density,2) self.charge.append(l) # Υπολογισμός γραμμικής πυκνότητας γόμωσης I για κάθε φυσίγγιο που έχει καταχωρηθεί και τοποθέτηση τους στη λίστα self.charge . [((π*d^2)*ρ)/4]. def calculation(self): Semex=round(((5*self.Q)/(6*5))+((1*self.V)/(6*0.85)),2) self.Sanfo=round(Semex/0.84,2) self.hdepth=round(0.15+(34.1*self.emptyf)-(39.4*(self.emptyf**2)),2) self.advance=round(0.95*self.hdepth,2) for i in range(len(self.cartridges)): a=self.cartridges[i]['diameter']*1000,"mm" x=0 self.diam.append(a) self.number_first.append(x) self.number_second.append(x) self.number_third.append(x) self.number_fourth.append(x) self.number_lifters.append(x) self.number_roof.append(x) self.number_wall.append(x) self.number_stoping.append(x) self.number_stoping1.append(x) self.number_roof1.append(x) self.number_lifters1.append(x) # Υπολογισμός σχετικής ισχύος εκρηκτικής ύλης ως προς LBF και μετά (/0.84) ως προς ANFO. # Ο υπολογισμός αυτός γίνεται με βάση το Q και το V του εκρηκτικού που χρησιμοποιώ. # Οι παρακάτω λίστες θα χρησιμοποιηθούν για την καταγραφή των φυσιγγίων που θα χρησιμοποιηθούν στα διατρήμματα. # Για παράδειγμα , αν στα stoping holes έχω 4 φυσίγια "α", 0 φυσίγγια "β" και 3 φυσίγγια "γ", η λίστα θα γράφει [4,0,3]. # Δηλώνω αρχική τιμή της λίστας το 0 (x), για να ξεκινάνε με [0,0,0] και να μεταβάλλονται παρακάτω ανάλογα με τα διατρήματα. def first_quadrangle(self): V1max=round(1.7*self.emptyf,2) # Μέγιστο φορτίο #if (((self.a*self.hdepth)+self.b)*10)<1: # Έλεχγος για το άν η απόκλιση είναι κάτω απο 1% για τον υπολογισμό του πρακτικού φορτίου . #V1=round(1.5*self.emptyf,2) #else: V1=round((V1max-((self.a*self.hdepth)+self.b)),2) #a,b (m) charge=round((((55*self.hdiam)*((round(V1max,2)/self.emptyf)**1.5)*(round(V1max,2)-(self.emptyf/2))*(self.c/0.4))/self.Sanfo),2) # γραμμική πυκνότητα γόμωσης ανάλογα του φορτίου minimum=1000 th=0 for i in range(len(self.charge)): if abs(self.charge[i]-charge)0.5Β ,επιλέγει το αντίστοιχο φυσίγγιο if Vpractical<(2*B2temp) and abs(Vpractical-2*B2temp)0.5*B2temp: minimum=abs(Vpractical-2*B2temp) th=i V2=practicalb[th] # Καταχώρηση του πρακτικού φορτίου ανάλογα στη θέση (th) του φυσιγγίου που επιλέχθηκε self.practicalb.append(V2) # Λίστα πρακτικών φορτίων h=10*self.hdiam # Επιγόμωση B2=round(math.sqrt(2)*(round(V2,2)+(self.B[0]/2)),2) # Πλευρά τετραγώνου self.B.append(B2) # Λίστα πλευράς τετραγώνου No_second=round((self.hdepth-h)/(self.cartridges[th]["length"])*2)/2 # Αριθμός φυσιγγίων mass2=round(((self.charge[th])*(self.cartridges[th]["length"])*(No_second)),2) # Μάζα γόμωσης ανά διάτρημα self.massph.append(mass2) # Λίστα μάζας γόμωσης/διάτρημα Holes_second=4 # Αριθμός διατρημάτων self.holes.append(Holes_second) # Λίστα αριθμού διατρημάτων (4 επειδή ειναι τετράγωνα) self.test_no.append(Holes_second) self.test_mass.append(mass2) for i in range(len(self.number_second)): self.number_second[th]=No_second # Για κάθε τύπο φυσιγγίου , τοποθετείται στη λίστα ο αριθμός που θα χρησιμοποιηθεί πχ.[4,0,4] # Η διαδικασία είναι η ίδια με του πρώτου τετραγώνου . # Η μόνη διαφορά είναι ότι η την επιλογή του αντίστοιχου φυσιγγίου που θα χρησιμοποιήσω θα γίνει με βάση τη θεωρητική πλευρά τετραγώνου def third_quadrangle(self): B3temp=round(math.sqrt(2)*(round(self.practicalb[1],2)+(round(self.B[0]/2,2))-(self.a*self.hdepth+self.b)),2) practicalb=[] minimum=1000 th=0 for i in range(len(self.charge)): V3max=round((8.8*0.01)*math.sqrt((B3temp*self.charge[i]*self.Sanfo)/(self.hdiam*self.c)),2) Vpractical=round(V3max-((self.a*self.hdepth)+self.b),2) practicalb.append(Vpractical) if Vpractical<=(2*B3temp) and abs(Vpractical-2*B3temp)0.5*B3temp: minimum=abs(Vpractical-2*B3temp) th=i V3=practicalb[th] self.practicalb.append(V3) h=10*self.hdiam B3=round(math.sqrt(2)*(V3+(self.B[1]/2)),2) self.B.append(B3) No_third=round((self.hdepth-h)/(self.cartridges[th]["length"])*2)/2 mass3=round(((self.charge[th])*(self.cartridges[th]["length"])*(No_third)),2) self.massph.append(mass3) Holes_third=4 self.holes.append(Holes_third) self.test_no.append(Holes_third) self.test_mass.append(mass3) for i in range(len(self.number_third)): self.number_third[th]=No_third # Ομοίως με τα παραπάνω τετράγωνα def fourth_quadrangle(self): B4temp=round(math.sqrt(2)*(round(self.practicalb[2],2)+(round(self.B[1],2)/2)-(self.a*self.hdepth+self.b)),2) practicalb=[] minimum=1000 th=0 for i in range(len(self.charge)): V4max=round((8.8*0.01)*math.sqrt((round(B4temp,2)*self.charge[i]*self.Sanfo)/(self.hdiam*self.c)),2) Vpractical=round(V4max-((self.a*self.hdepth)+self.b),2) practicalb.append(Vpractical) if Vpractical<=(2*B4temp) and abs(Vpractical-2*B4temp)0.5*B4temp: minimum=abs(Vpractical-2*B4temp) th=i V4=practicalb[th] B4=round(math.sqrt(2)*(V4+(self.B[2]/2)),2) self.practicalb.append(V4) if self.abutmentH>=4.5 or self.abutmentH+self.archHeight>=4.5: h=10*self.hdiam self.B.append(B4) No_fourth=round((self.hdepth-h)/(self.cartridges[th]["length"])*2)/2 mass4=round(((self.charge[th])*(self.cartridges[th]["length"])*(No_fourth)),2) self.massph.append(mass4) Holes_fourth=4 self.holes.append(Holes_fourth) self.test_no.append(Holes_fourth) self.test_mass.append(mass4) for i in range(len(self.number_fourth)): self.number_fourth[th]=No_fourth else: self.practicalb.pop(3) self.B.append(self.B[2]) self.practicalb.append(self.practicalb[2]) h=10*self.hdiam B4==self.B[2] No_fourth=0 mass4=0 self.massph.append(mass4) Holes_fourth=0 self.holes.append(Holes_fourth) self.test_no.append(Holes_fourth) self.test_mass.append(mass4) for i in range(len(self.number_fourth)): self.number_fourth[th]=No_fourth # Ομοίως με τα παραπάνω τετράγωνα def lifters(self): x=round(0.6*self.hdepth,2) # Το πρακτικό φορτίο των Lifters πρέπει να είναι μικρότερο ή ίσο με 0.6 φορές το Βάθος του διατρήματος minimum=1000 th=0 for i in range(len(self.charge)): v1max=round(0.9*math.sqrt((self.charge[i]*self.Sanfo)/(1.25*(self.c+0.05)*1.25)),2) if (v1max<=x) and (x-v1max)=1.4: VLmax=vl # Αν το πρακτικό φορτίο είναι μεγαλύτερο από 1.4 , η διορθωμένη σταθερά c αλλάζει else: VLmax=round(0.9*math.sqrt((self.charge[th]*self.Sanfo)/(1.45*(self.c+(0.07/vl)))),2) N=int(((self.width+2*self.hdepth*math.sin(self.g))/VLmax)+1) # Αριθμός διατρημάτων δαπέδου El=round(((self.width+2*self.hdepth*math.sin(self.g))/(N-1)),2) # Απόσταση διατρημάτων δαπέδου corner_El=round(El-(self.hdepth*math.sin(self.g)),2) # Απόσταση γωνιακών διατρημάτων δαπέδου VL=round(VLmax-(self.hdepth*math.sin(self.g))-(self.a*self.hdepth+self.b),2) # Πρακτικό φορτίο (Μέγιστο - F) self.practicalb.append(VL) hb=round(1.25*VL,2) # Μήκος επιγόμωσης πυθμένα hc=self.hdepth-hb-(10*self.hdiam) # Μήκος επιγόμωσης στήλης charge_column=round(0.7*self.charge[th],2) # Γραμμική πυκνότητα γόμωσης στήλης minimum=1000 th1=0 for i in range(len(self.charge)): if abs(self.charge[i]-charge_column)min_charge): # Επιλογή φυσιγγίου ανάλογα με την ελάχιστη γραμμική πυκνότητα γόμωσης minimum=abs(self.charge[i]-min_charge) th=i No_cartridges_roof=int(self.hdepth/self.cartridges[th]["length"]) # Αριθμός φυσιγγίων. Δεν έχει επιγόμωση massR=round(((self.charge[th])*(self.cartridges[th]["length"])*(No_cartridges_roof)),2) # Μάζα γόμωσης ανά διάτρημα self.massph.append(massR) No_holes_roof=int(((self.abutmentH+(self.abutmentH*math.sin(self.g))+self.archHeight)/E)+2) #Συν 2 ,γιατί αλλιώς βγαίνει 7,91 .επομένως επιλέγει το 7 αντί του 8!!!! Holes_roof=No_holes_roof # Αριθμός διατρημάτων οροφής self.holes.append(Holes_roof) for i in range(len(self.number_roof)): self.number_roof[th]=No_cartridges_roof # Λίστα ποσότητας κάθε τύπου φυσιγγίων self.spacing.append(spacing_roof) def wall(self): distance=round(self.abutmentH-round(self.practicalb[4],2)-round(self.practicalb[5],2),2) # Χώρος που απομένει για τα διατρήματα τοίχου x=round(0.6*self.hdepth,2) minimum=1000 th=0 for i in range(len(self.charge)): VWmax=round(0.9*math.sqrt((self.charge[i]*self.Sanfo)/(1.2*(self.c+0.05)*1.25)),2) # Ίδιο μοτίβο με διατρήματα δαπέδου if (VWmax<=x) and (x-VWmax)=distance_h: # VH πρακτικό φορτίο, Vh νέο πρακτικό φορτίο αν ισχύει η συνθήκη VH=round(distance_h+0.01,2) cols_h=1 # Αριθμός στηλών Spacing_columns_h=VH # Απόσταση διατρημάτων στήλης else: cols_h=int(distance_h/VH) Spacing_columns_h=VH if (cols_h)*Spacing_columns_h=self.B[3]: rows_h=2 Spacing_rows_h=self.B[3] else: VH=(round(Vhmax-(self.a*self.advance+self.b),2)) rows_h=int((self.B[3]/(0.9*VH))+1) Spacing_rows_h=round(0.9*VH,2) if (rows_h-1)*Spacing_rows_hheight_d: vd=round(height_d,2) # Αν το πρακτικό φορτίο είναι μεγαλύτερο από το διαθέσιμο χώρο, τότε χρησιμοποείται νέο πρακτικό φορίτο όσο ο διαθέσιμος χώρος if (self.width-2*self.practicalb[6])<(2*VD): cols_d=3 else: cols_d=int(((self.width-2*self.practicalb[6])/(1*VD))+1) # Στήλες καθέτων διατρημάτων Spacing_columns_d=round((self.width-2*self.practicalb[6])/(cols_d-1),2) # Απόσταση στηλών καθέτων διατρημάτων for i in range(0,cols_d): XS=xS1+(i*Spacing_columns_d) YS=0+self.practicalb[4]+self.B[3] a3= self.width/2 b3 =(self.abutmentH+self.archHeight)-(self.abutmentH-self.practicalb[5])-self.practicalb[5] x03 =self.width/2 y03 =self.abutmentH-self.practicalb[5] x3 = XS y3 = b3 * np.sqrt(1 - ((x3-x03) / a3) ** 2) + y03 # Το πρακτικό φορτίο οροφής είναι μια καμπύλη επομένως πρέπει ο διαθέσιμος χώρος να υπολογιστεί βάσει της καμπύλης d=int(((y3+0.1-YS)/vd)) if d<1: carts=carts+1 else: if (d)*vd<(y3-YS-0.3): carts=carts+d+1 else: carts=carts+d else: vd1=VD #cols_d=int(((self.width-2*self.practicalb[6])/(1*VD))+1) if (self.width-2*self.practicalb[6])<(2*VD): cols_d=3 else: cols_d=int(((self.width-2*self.practicalb[6])/(1*VD))+1) # Στήλες καθέτων διατρημάτων Spacing_columns_d=round((self.width-2*self.practicalb[6])/(cols_d-1),2) d=int((height_d/vd1)+1) if d*vd1>height_d: vd=round((height_d/d),2) else: vd=vd1 for i in range(0,cols_d): XS=xS1+(i*Spacing_columns_d) YS=0+self.practicalb[4]+self.B[3] a3= self.width/2 b3 =(self.abutmentH+self.archHeight)-(self.abutmentH-self.practicalb[5])-self.practicalb[5] x03 =self.width/2 y03 =self.abutmentH-self.practicalb[5] x3 = XS y3 = b3 * np.sqrt(1 - ((x3-x03) / a3) ** 2) + y03 d=int((y3+0.1-YS)/vd) if d<1: carts=carts+1 else: if (d)*vd<(y3-YS-0.3): carts=carts+d+1 else: carts=carts+d No_holes_d= carts No_holes_stoping=No_holes_d+No_holes_h #Συνολικός αριθμός διατρημάτων διεύρυνσης self.holes.append(No_holes_stoping) self.spacing_columns.append(Spacing_columns_d) self.cols_downwards.append(cols_d) self.practicalb.append(vd) #Cartridges Calculation hb=round(1.25*VH,2) # Μήκος επιγόμωσης πυθμένα hc=round(self.hdepth-round(hb,2)-(10*self.hdiam),2) # Μήκος επιγόμωσης στήλης charge_column=round(0.5*self.charge[th],2) # Γραμμική πυκνότητα γόμωσης στήλης minimum=1000 th1=0 for i in range(len(self.charge)): if abs(self.charge[i]-charge_column)=4.5 or self.abutmentH+self.archHeight>=4.5: xQ=(self.width/2) # Συντεταγμένες αρχής cut (τέρμα αριστερά δίπλα απο το πρακτικό φορτίο του τοίχου) yQ=(self.abutmentH/2) # Ορίζεται αρχικό σημείο το κενό διάτρημα που βρίσκεται στο μέσο του cut. # Συντεταγμένη ψ υπολογίζεται από το τέλος του πρακτικού φορτίου των lifters και το μισό από την πλευρά του 4ου τετραγώνου plt.scatter(xQ,yQ) # Συντεταγμένη χ υπολογίζεται από το τέλος του πρακτικού φορτίου του τοίχου και το μισό από την πλευρά του 4ου τετραγώνου x1=[xQ-(round(self.B[0],2)*math.cos(0.25*math.pi)),xQ,xQ+(round(self.B[0],2)*math.cos(0.25*math.pi)),xQ,xQ-(round(self.B[0],2)*math.cos(0.25*math.pi))] y1=[yQ,yQ+(round(self.B[0],2)*math.sin(0.25*math.pi)),yQ,yQ-(round(self.B[0],2)*math.sin(0.25*math.pi)),yQ] # Με αρχικές συντεταγμένες τα xQ, yQ, υπολογίζονται οι συντεταγμένες του κάθε σημείου του τετραγώνου # Ο υπολογισμός γίνεται με τα συνημίτονα και τα ημίτονα των γωνιών και τις αντίστοιχες πλευρές του κάθε τετραγώνου self.B x2=[(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi)))+round(self.B[1],2),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi)))+round(self.B[1],2),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi)))] y2=[(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi)))-round(self.B[1],2),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi)))-round(self.B[1],2),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi)))] x3=[xQ-(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),xQ,xQ+(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),xQ,xQ-(round(self.practicalb[2],2)+(round(self.B[1],2)/2))] y3=[yQ,yQ+(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),yQ,yQ-(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),yQ] x4=[(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi)))+round(self.B[3],2),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi)))+round(self.B[3],2),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi)))] y4=[(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi)))-round(self.B[3],2),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi)))-round(self.B[3],2),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi)))] plt.scatter(x1,y1,color='olive') plt.scatter(x2,y2,color='olive') plt.scatter(x3,y3,color='olive') plt.scatter(x4,y4,color='olive') plt.plot(x1,y1,color='black') # Δημιουργία ευθειών ανάμεσα στα διατρήματα για την απεικόνιση τετραγώνων!!! plt.plot(x2,y2,color='black') plt.plot(x3,y3,color='black') plt.plot(x4,y4,color='black') ax.annotate(self.B[2],(xQ-(x3[3]-x3[2]/2),y3[4]-y3[3]/2)) ax.annotate(self.B[3],(x4[0]+self.B[3]/2,y4[0])) # ΄Οπου annotate, η απεικόνιση της πλευράς του κάθε τετραγώνου!!! ax.annotate(self.B[1],(xQ,yQ+self.B[1]/2)) ax.annotate(self.B[0],(xQ-(x1[2]-x1[1]),yQ-(y1[1]-y1[2]))) ax.annotate(self.emptyf,(xQ,yQ),color='blue') else: xQ=(self.width/2) # Συντεταγμένες αρχής cut (τέρμα αριστερά δίπλα απο το πρακτικό φορτίο του τοίχου) yQ=(self.abutmentH/2) # Ορίζεται αρχικό σημείο το κενό διάτρημα που βρίσκεται στο μέσο του cut. x1=[(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi)))+round(self.B[0],2),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi)))+round(self.B[0],2),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi)))] y1=[(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi)))-round(self.B[0],2),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi)))-round(self.B[0],2),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi)))] x2=[xQ-(round(self.B[1],2)*math.cos(0.25*math.pi)),xQ,xQ+(round(self.B[1],2)*math.cos(0.25*math.pi)),xQ,xQ-(round(self.B[1],2)*math.cos(0.25*math.pi))] y2=[yQ,yQ+(round(self.B[1],2)*math.sin(0.25*math.pi)),yQ,yQ-(round(self.B[1],2)*math.sin(0.25*math.pi)),yQ] x3=[(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi)))+round(self.B[2],2),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi)))+round(self.B[2],2),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi)))] y3=[(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi)))-round(self.B[2],2),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi)))-round(self.B[2],2),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi)))] plt.scatter(x1,y1,color='olive') plt.scatter(x2,y2,color='olive') plt.scatter(x3,y3,color='olive') plt.plot(x1,y1,color='black') # Δημιουργία ευθειών ανάμεσα στα διατρήματα για την απεικόνιση τετραγώνων!!! plt.plot(x2,y2,color='black') plt.plot(x3,y3,color='black') ax.annotate(self.B[2],(xQ,yQ+self.B[2]/2)) # ΄Οπου annotate, η απεικόνιση της πλευράς του κάθε τετραγώνου!!! ax.annotate(self.B[1],(xQ,yQ+self.B[1]/2)) ax.annotate(self.B[0],(xQ-(x1[2]-x1[1]),yQ-(y1[1]-y1[2]))) ax.annotate(self.emptyf,(xQ,yQ),color='blue') # Lifters x=round(0.6*self.hdepth,2) # Το πρακτικό φορτίο των Lifters πρέπει να είναι μικρότερο ή ίσο με 0.6 φορές το Βάθος του διατρήματος minimum=1000 th=0 for i in range(len(self.charge)): v1max=round(0.9*math.sqrt((self.charge[i]*self.Sanfo)/(1.25*(self.c+0.05)*1.25)),2) if (v1max<=x) and (x-v1max)=1.4: VLmax=vl # Αν το πρακτικό φορτίο είναι μεγαλύτερο από 1.4 , η διορθωμένη σταθερά c αλλάζει else: VLmax=round(0.9*math.sqrt((self.charge[th]*self.Sanfo)/(1.45*(self.c+(0.07/vl)))),2) N=int(((self.width+2*self.hdepth*math.sin(self.g))/VLmax)+1) # Αριθμός διατρημάτων δαπέδου El=round(((self.width+2*self.hdepth*math.sin(self.g))/(N-1)),2) # Απόσταση διατρημάτων δαπέδου corner_El=round(El-(self.hdepth*math.sin(self.g)),2) # Απόσταση γωνιακών διατρημάτων δαπέδου VL=round(VLmax-(self.hdepth*math.sin(self.g))-(self.a*self.hdepth+self.b),2) # Πρακτικό φορτίο (Μέγιστο - F) self.practicalb.append(VL) hb=round(1.25*VL,2) # Μήκος επιγόμωσης πυθμένα hc=self.hdepth-hb-(10*self.hdiam) # Μήκος επιγόμωσης στήλης charge_column=round(0.7*self.charge[th],2) # Γραμμική πυκνότητα γόμωσης στήλης minimum=1000 th1=0 for i in range(len(self.charge)): if abs(self.charge[i]-charge_column)min_charge): # Επιλογή φυσιγγίου ανάλογα με την ελάχιστη γραμμική πυκνότητα γόμωσης minimum=abs(self.charge[i]-min_charge) th=i No_cartridges_roof=int(self.hdepth/self.cartridges[th]["length"]) massR=round(((self.charge[th])*(self.cartridges[th]["length"])*(No_cartridges_roof)),2) No_holes_roof=int(self.width/E)+1 spacing=round(self.width/(No_holes_roof-1),2) Holes_roof=No_holes_roof self.test_no.append(Holes_roof) self.test_mass.append(massR) total=massR*No_holes_roof for i in range(len(self.number_roof)): self.number_roof1[th]=No_cartridges_roof for i in range(0,Holes_roof): xR=(0+(i)*spacing) yR=self.abutmentH plt.scatter(xR,yR,color='brown') xM=(self.width/2) yM=self.abutmentH-0.2 ax.annotate(spacing,(xM,yM)) # Horizontal stoping τετραγωνικής minimum=1000 th=0 for i in range(len(self.charge)): VHmax=round(0.9*math.sqrt((self.charge[i]*self.Sanfo)/(1.25*(self.c+0.05)*1.25)),2) if (VHmax<=x) and (x-VHmax)=distance_h: VH=round(distance_h+0.01,2) cols_h=1 Spacing_columns_h=VH else: cols_h=int((distance_h/VH)+1) Spacing_columns_h=VH if (cols_h-1)*Spacing_columns_h=self.B[3]: rows_h=2 Spacing_rows_h=self.B[3] else: VH=(round(Vhmax-(self.a*self.advance+self.b),2)) rows_h=int((self.B[3]/(0.9*VH))+1) Spacing_rows_h=round(0.9*VH,2) if (rows_h-1)*Spacing_rows_hheight_d1: vd=round(height_d1,2) if (self.width<(2*VD)): cols_d1=3 else: cols_d1=int((self.width/(1*VD))+1) Spacing_columns_d1=round((self.width/(cols_d1-1)),2) rows_d1=1 Spacing_rows_d1=vd else: vd=VD if (self.width<(2*VD)): cols_d1=3 else: cols_d1=int((self.width/(1*VD))+1) Spacing_columns_d1=round((self.width/(cols_d1-1)),2) rows_d1=int(height_d1/vd) Spacing_rows_d1=vd if (rows_d1*Spacing_rows_d1)0.1: cols_d2=cols_d1 rows_d2=0 if VD>height_d2: vd2=round(height_d2,2) cols_d2=cols_d1 Spacing_columns_d2=Spacing_columns_d1 rows_d2=1 Spacing_rows_d2=vd2 else: vd2=VD cols_d2=cols_d1 Spacing_columns_d2=Spacing_columns_d1 rows_d2=int(height_d2/vd2) Spacing_rows_d2=vd if (rows_d2*Spacing_rows_d2)=4.5 or self.abutmentH+self.archHeight>=4.5: xQ=(0+self.practicalb[6]+self.B[3]/2) # Συντεταγμένες αρχής cut (τέρμα αριστερά δίπλα απο το πρακτικό φορτίο του τοίχου) yQ=(0+self.practicalb[4]+self.B[3]/2) # Ορίζεται αρχικό σημείο το κενό διάτρημα που βρίσκεται στο μέσο του cut. # Συντεταγμένη ψ υπολογίζεται από το τέλος του πρακτικού φορτίου των lifters και το μισό από την πλευρά του 4ου τετραγώνου plt.scatter(xQ,yQ) # Συντεταγμένη χ υπολογίζεται από το τέλος του πρακτικού φορτίου του τοίχου και το μισό από την πλευρά του 4ου τετραγώνου x1=[xQ-(round(self.B[0],2)*math.cos(0.25*math.pi)),xQ,xQ+(round(self.B[0],2)*math.cos(0.25*math.pi)),xQ,xQ-(round(self.B[0],2)*math.cos(0.25*math.pi))] y1=[yQ,yQ+(round(self.B[0],2)*math.sin(0.25*math.pi)),yQ,yQ-(round(self.B[0],2)*math.sin(0.25*math.pi)),yQ] # Με αρχικές συντεταγμένες τα xQ, yQ, υπολογίζονται οι συντεταγμένες του κάθε σημείου του τετραγώνου # Ο υπολογισμός γίνεται με τα συνημίτονα και τα ημίτονα των γωνιών και τις αντίστοιχες πλευρές του κάθε τετραγώνου self.B x2=[(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi)))+round(self.B[1],2),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi)))+round(self.B[1],2),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.cos(0.25*math.pi)))] y2=[(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi)))-round(self.B[1],2),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi)))-round(self.B[1],2),(yQ+((round(self.practicalb[1],2)+(round(self.B[0],2)/2))*math.sin(0.25*math.pi)))] x3=[xQ-(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),xQ,xQ+(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),xQ,xQ-(round(self.practicalb[2],2)+(round(self.B[1],2)/2))] y3=[yQ,yQ+(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),yQ,yQ-(round(self.practicalb[2],2)+(round(self.B[1],2)/2)),yQ] x4=[(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi)))+round(self.B[3],2),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi)))+round(self.B[3],2),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.cos(0.25*math.pi)))] y4=[(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi)))-round(self.B[3],2),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi)))-round(self.B[3],2),(yQ+((round(self.practicalb[3],2)+(round(self.B[2],2)/2))*math.sin(0.25*math.pi)))] plt.scatter(x1,y1,color='olive') plt.scatter(x2,y2,color='olive') plt.scatter(x3,y3,color='olive') plt.scatter(x4,y4,color='olive') plt.plot(x1,y1,color='black') # Δημιουργία ευθειών ανάμεσα στα διατρήματα για την απεικόνιση τετραγώνων!!! plt.plot(x2,y2,color='black') plt.plot(x3,y3,color='black') plt.plot(x4,y4,color='black') ax.annotate(self.B[2],(xQ-(x3[3]-x3[2]/2),y3[4]-y3[3]/2)) ax.annotate(self.B[3],(x4[0]+self.B[3]/2,y4[0])) # ΄Οπου annotate, η απεικόνιση της πλευράς του κάθε τετραγώνου!!! ax.annotate(self.B[1],(xQ,yQ+self.B[1]/2)) ax.annotate(self.B[0],(xQ-(x1[2]-x1[1]),yQ-(y1[1]-y1[2]))) ax.annotate(self.emptyf,(xQ,yQ),color='blue') else: xQ=(0+self.practicalb[6]+self.B[2]/2) # Συντεταγμένες αρχής cut (τέρμα αριστερά δίπλα απο το πρακτικό φορτίο του τοίχου) yQ=(0+self.practicalb[4]+self.B[2]/2) # Ορίζεται αρχικό σημείο το κενό διάτρημα που βρίσκεται στο μέσο του cut. x1=[(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi)))+round(self.B[0],2),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi)))+round(self.B[0],2),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[0],2))*math.cos(0.25*math.pi)))] y1=[(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi)))-round(self.B[0],2),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi)))-round(self.B[0],2),(yQ+((round(self.practicalb[0],2))*math.sin(0.25*math.pi)))] x2=[xQ-(round(self.B[1],2)*math.cos(0.25*math.pi)),xQ,xQ+(round(self.B[1],2)*math.cos(0.25*math.pi)),xQ,xQ-(round(self.B[1],2)*math.cos(0.25*math.pi))] y2=[yQ,yQ+(round(self.B[1],2)*math.sin(0.25*math.pi)),yQ,yQ-(round(self.B[1],2)*math.sin(0.25*math.pi)),yQ] x3=[(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi)))+round(self.B[2],2),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi)))+round(self.B[2],2),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi))),(xQ-((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.cos(0.25*math.pi)))] y3=[(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi))),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi)))-round(self.B[2],2),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi)))-round(self.B[2],2),(yQ+((round(self.practicalb[2],2)+(round(self.B[1],2)/2))*math.sin(0.25*math.pi)))] plt.scatter(x1,y1,color='olive') plt.scatter(x2,y2,color='olive') plt.scatter(x3,y3,color='olive') plt.scatter(xQ,yQ) plt.plot(x1,y1,color='black') # Δημιουργία ευθειών ανάμεσα στα διατρήματα για την απεικόνιση τετραγώνων!!! plt.plot(x2,y2,color='black') plt.plot(x3,y3,color='black') ax.annotate(self.B[2],(xQ,yQ+self.B[2]/2)) # ΄Οπου annotate, η απεικόνιση της πλευράς του κάθε τετραγώνου!!! ax.annotate(self.B[1],(xQ,yQ+self.B[1]/2)) ax.annotate(self.B[0],(xQ-(x1[2]-x1[1]),yQ-(y1[1]-y1[2]))) ax.annotate(self.emptyf,(xQ,yQ),color='blue') # Απεικόνιση διαμέτρου αρχικού κενού διατρήματος #STOPING HOLES xS=0+self.practicalb[6]+self.B[3] # Αρχικές συντεταγμένες για τα διατρήματα διεύρυνσης , στο πάνω δεξιά άκρο του 4ου τετραγώνου του cut yS=0+self.practicalb[4]+self.B[3] c1=self.No_columns[0] # Αριθμός στηλών οριζοντίων διατρημάτων r1=self.No_rows[0] # Αριθμός σειρών οριζοντίων διατρημάτων for i in range(0,c1): xh=xS+((i+1)*self.spacing_columns[0]) # Συντεταγμένες κάθε στήλης οριζοντίων διατρημάτων yh=yS plt.scatter(xh,yh,color='red') for z in range(0,r1): # Συντεταγμένες κάθε σειράς οριζοντίων διατρημάτων xh1=xh yh1=yS-((z)*self.spacing_rows[0]) plt.scatter(xh1,yh1,color='red') plt.scatter(xh,yh,color='red') for i in range(0,c1): # Απεικόνιση αποστάσεων γραμμών/στηλών οριζοντίων διατρημάτων x1=xS+(i*self.practicalb[7]) y1=yS if i==0: ax.annotate(self.spacing_columns[0],(x1+self.spacing_columns[0]/2,y1),color='blue') for z in range(0,r1-1): x2=xS+c1*self.spacing_columns[0] y2=yS-z*(self.spacing_rows[0]) if z==0: ax.annotate(self.spacing_rows[0],(x2,y1-self.spacing_rows[0]/2),color='black') xS1=0+self.practicalb[6] # Αρχικές συντεταγμένες για τα κάθετα διατρήματα διεύρυνσης, το πάνω αριστερό άκρο του 4ου τετραγώνου του cut yS1=0+self.practicalb[4]+self.B[3] r2=self.spacing_columns[1] c2=self.cols_downwards[0] for i in range(0,c2): XS=xS1+(i*r2) YS=0+self.practicalb[4]+self.B[3] a3= self.width/2 b3 =(self.abutmentH+self.archHeight)-(self.abutmentH-self.practicalb[5])-self.practicalb[5] x03 =self.width/2 y03 =self.abutmentH-self.practicalb[5] x3 = XS y3 = b3 * np.sqrt(1 - ((x3-x03) / a3) ** 2) + y03 d=int((y3-YS)/(self.practicalb[8])) for i in range(0,c2-1): x4=0+self.practicalb[6]+(i*self.spacing_columns[1]) y4=0+self.practicalb[4]+self.B[3] if i==0: ax.annotate(self.spacing_columns[1],(x4+self.spacing_columns[1]/2,y4+self.practicalb[8]+0.1),color='black') x6=0+self.practicalb[6] y6=0+self.practicalb[4]+self.B[3] ax.annotate(self.practicalb[8],(x6,y6+(self.practicalb[8]/2)),color='blue') if d==1 and d*self.practicalb[8]>=y3-YS-0.1: XS1=XS YS1=y3 plt.scatter(XS1,YS1,color="red") else: for p in range(0,d): XS1=XS YS1=YS+((p+1)*self.practicalb[8]) plt.scatter(XS1,YS1,color='red') x6=0+self.practicalb[6] y6=0+self.practicalb[4]+self.B[3] if d*self.practicalb[8]