#!/usr/bin # -*- coding: utf-8 -*- import numpy as np import numpy.linalg as npla import math as m dicoNoeud={} dicoElement={} class Noeud(): def __init__(self, idt, x, y): self.idt = idt self.x = x self.y = y dicoNoeud[self.idt]= self def __str__(self): a = "Noeud " + str(self.idt) + " :\n" a += "- coordonnees : " + str(self.x) + " ; " + str(self.y) return a def dist(self, xext , yext): a = m.sqrt((self.x-xext)**2+(self.y-yext)**2) return a def distnoeud(self, noeud_ext): a = m.sqrt((self.x-noeud_ext.x)**2+(self.y-noeud_ext.y)**2) return a class Ressort(): def __init__(self,idt,n1,n2): self.idt = idt self.n1 = n1 self.n2 = n2 dicoElement[self.idt]=self def setProp(self,k): self.k = k self.type= "r" def matrice(self): adj= (self.n2.x - self.n1.x) self.L= self.n1.distnoeud(self.n2) self.angle = m.acos(adj/self.L) c= m.cos(self.angle) s= m.sin(self.angle) cs= c*s c2 = c*c s2= s*s d=np.array([[ c2, cs,-c2, -cs],\ [ cs, s2,-cs, -s2],\ [-c2,-cs, c2, cs],\ [-cs,-s2, cs, s2]]) d= d*self.k return d class Barre(): def __init__(self,idt,n1,n2): self.idt = idt self.n1 = n1 self.n2 = n2 dicoElement[self.idt]=self def setProp(self,E,S): self.E = E self.S = S self.L= self.n1.distnoeud(self.n2) self.type= "b" def matrice(self): adj= (self.n2.x - self.n1.x) self.angle = m.acos(adj/self.L) c= round(m.cos(self.angle),2) s= round(m.sin(self.angle),2) cs= c*s c2 = c*c s2= s*s d=np.array([[ c2, cs,-c2, -cs],\ [ cs, s2,-cs, -s2],\ [-c2,-cs, c2, cs],\ [-cs,-s2, cs, s2]]) k= (self.E*self.S)/self.L d= d*k return d class Poutre(): def __init__(self,idt,n1,n2): self.idt = idt self.n1 = n1 self.n2 = n2 dicoElement[self.idt]=self def setProp(self,E,I,S): self.E = E self.I = I self.S = S self.L = self.n1.distnoeud(self.n2) self.type = "p" def matrice(self): k1= (self.E*self.S/self.L) k2= (self.I*self.E)/(self.L**3) kg=np.array([[ k1 , 0. , 0. , -k1 , 0. , 0. ],\ [ 0. , 12*k2 , 6*self.L*k2 , 0. , -12*k2 , 6*self.L*k2 ],\ [ 0. , 6*self.L*k2 , 4*(self.L**2)*k2, 0. , -6*self.L*k2 , 2*(self.L**2)*k2 ],\ [ -k1 , 0. , 0. , k1 , 0. , 0. ],\ [ 0. , -12*k2 , -6*self.L*k2 , 0. , 12*k2 , -6*self.L*k2 ],\ [ 0. , 6*self.L*K2 , 2*(self.L**2)*k2, 0. , -6*self.L*k2 , 4*(self.L**2)*k2 ]]) adj= (self.n2.x - self.n1.x) self.angle = m.acos(adj/self.L) c= round(m.cos(self.angle),2) s= round(m.sin(self.angle),2) self.q = np.array([[ c , -s , 0. , 0. , 0. , 0. ],\ [ s , c , 0. , 0. , 0. , 0. ],\ [ 0. , 0. , 1. , 0. , 0. , 0. ],\ [ 0. , 0. , 0. , c , -s , 0. ],\ [ 0. , 0. , 0. , s , c , 0. ],\ [ 0. , 0. , 0. , 0. , 0. , 1. ]]) transp_q= np.transpose(self.q) d= np.dot(transp_q,kg) d= np.dot(d,q) return d