def __init__(self, nav_data, div=5, dx=0.0, dy=1.6757135024103853, dth=0.0, pc1=1 / 3, pc2=9 / 24, ph=0.2): """Cria objeto navio, com os parametros passados. Os valores pc1, pc2 e ph indicam o inicio da curvatura e dos chanfros""" self.div = div self.t = np.arange(self.div) / self.div self.L = nav_data.loc['Loa'] self.H = nav_data.loc['B'] self.T = nav_data.loc['T'] self.dx = dx self.dy = dy self.dth = dth self.c1 = self.L * pc1 self.c2 = self.L * pc2 self.h2 = self.H * ph self.Rz = rotation.matrix([0, 0, 1], dth) self.LWT = 0.50 * nav_data.loc['Delta_m'] self.Md = nav_data.loc['Delta_m'] #self.LWT + self.DWT self.D = nav_data.loc['De'] self.G = self.T - self.D self.z = nav_data.loc['KG'] - self.D
def at_a(self, dx, dy, dth): """atualiza os pontos de amarracao no navio em funcao do cg e de uma matriz de rotacao""" self.xa = self.a[0] - self.cg_ant[0] self.ya = self.a[1] - self.cg_ant[1] self.za = self.a[2] self.Rz = rotation.matrix([0, 0, 1], dth) self.aux = np.array([self.xa, self.ya, self.za]) self.aux = np.dot(self.Rz, self.aux) self.aux[0] = self.aux[0] + self.cg_ant[0] + dx self.aux[1] = self.aux[1] + self.cg_ant[1] + dy self.a = np.array([self.aux[0], self.aux[1], self.aux[2]])
def coordnav(self, dx, dy, dth): """Atualiza as coordenadas obtidas na funcao pontos aplicando deslocamentos dx, dy e dth (rotacao)""" self.cg_ant = np.array(self.cg) self.coord[0] = self.coord[0] - self.cg[0] self.coord[1] = self.coord[1] - self.cg[1] self.Rz = rotation.matrix([0, 0, 1], dth) self.coord = np.dot(self.Rz, self.coord) self.coord[0] = self.coord[0] + self.cg[0] + dx self.coord[1] = self.coord[1] + self.cg[1] + dy self.px = self.coord[:, self.px_index] self.Bx = self.px - self.cg self.basex = self.Bx / math.sqrt(np.dot(self.Bx, self.Bx))