def bias_n_li(self, theta): #接收一个list类型的theta参数;返回【所有级】的结果 runout = self.runout r = self.r H = self.H p = [0] * (len(theta)) for i in range(len(theta)): vector_down = pre.pfit( self.gcfl(r[i * 4], runout[i * 4], 0, theta[i])) vector_up = pre.pfit( self.gcfl(r[i * 4 + 1], runout[i * 4 + 1], 0, theta[i])) center_down = pre.circ( self.gcra(r[i * 4 + 2], runout[i * 4 + 2], 0, theta[i])) center_up = pre.circ( self.gcra(r[i * 4 + 3], runout[i * 4 + 3], 0, theta[i])) results = pre.eccentric(center_down[1], center_down[2], center_up[1], center_up[2], vector_down[0], vector_down[1], vector_down[2], vector_up[0], vector_up[1], vector_up[2], H[i]) p[i] = np.array([[1, 0, results[2], results[0]], [0, 1, results[3], results[1]], [-results[2], -results[3], 1, H[i]], [0, 0, 0, 1]]) e, phase = [0] * (len(p)), [0] * (len(p)) m = 1 for i in range(len(p)): m = np.dot(m, p[i]) #偏心量 e[i] = np.sqrt(m[0, 3]**2 + m[1, 3]**2) #偏心相位 phase[i] = self.get_phase(m[0, 3], m[1, 3]) return np.stack((e, phase), axis=1)
def bias_2(self, part1_theta, part2_theta): runout = self.runout r = self.r H = self.H #生成坐标 part1_flat_coordinate_down = self.gcfl(r[0], runout[0], 0, part1_theta) part1_flat_coordinate_up = self.gcfl(r[1], runout[1], 0, part1_theta) part1_radial_coordinate_down = self.gcra(r[2], runout[2], 0, part1_theta) part1_radial_coordinate_up = self.gcra(r[3], runout[3], 0, part1_theta) #part1两端圆心及法向量 part1_center_down = pre.circ(part1_radial_coordinate_down) part1_center_up = pre.circ(part1_radial_coordinate_up) part1_vector_down = pre.pfit(part1_flat_coordinate_down) part1_vector_up = pre.pfit(part1_flat_coordinate_up) #生成坐标 part2_flat_coordinate_down = self.gcfl(r[4], runout[4], 0, part2_theta) part2_flat_coordinate_up = self.gcfl(r[5], runout[5], 0, part2_theta) part2_radial_coordinate_down = self.gcra(r[6], runout[6], 0, part2_theta) part2_radial_coordinate_up = self.gcra(r[7], runout[7], 0, part2_theta) #part2两端圆心及法向量 part2_center_down = pre.circ(part2_radial_coordinate_down) part2_center_up = pre.circ(part2_radial_coordinate_up) part2_vector_down = pre.pfit(part2_flat_coordinate_down) part2_vector_up = pre.pfit(part2_flat_coordinate_up) #求出装配后偏心偏斜量 part1_results = pre.eccentric( part1_center_down[1], part1_center_down[2], part1_center_up[1], part1_center_up[2], part1_vector_down[0], part1_vector_down[1], part1_vector_down[2], part1_vector_up[0], part1_vector_up[1], part1_vector_up[2], H[0]) part2_results = pre.eccentric( part2_center_down[1], part2_center_down[2], part2_center_up[1], part2_center_up[2], part2_vector_down[0], part2_vector_down[1], part2_vector_down[2], part2_vector_up[0], part2_vector_up[1], part2_vector_up[2], H[1]) part1_x_center = part1_results[0] part1_y_center = part1_results[1] part1_theta_y = part1_results[2] part1_theta_x = part1_results[3] part2_x_center = part2_results[0] part2_y_center = part2_results[1] part2_theta_y = part2_results[2] part2_theta_x = part2_results[3] p1 = np.array([[1, 0, part1_theta_y, part1_x_center], [0, 1, part1_theta_x, part1_y_center], [-part1_theta_y, -part1_theta_x, 1, H[0]], [0, 0, 0, 1]]) p2 = np.array([[1, 0, part2_theta_y, part2_x_center], [0, 1, part2_theta_x, part2_y_center], [-part2_theta_y, -part2_theta_x, 1, H[1]], [0, 0, 0, 1]]) m = np.matmul(p1, p2) #偏心量 e = np.sqrt(m[0, 3]**2 + m[1, 3]**2) #偏心相位 phase = self.get_phase(m[0, 3], m[1, 3]) return [e, phase]
def getPara2(self): runout = self.runout r = self.r para = [[]] * len(r) for i in range(int(len(r) / 4)): vector_down = pre.pfit(pre.gcfl(r[i * 4], runout[i * 4], 0)) vector_up = pre.pfit(pre.gcfl(r[i * 4 + 1], runout[i * 4 + 1], 0)) args_1 = list(zip([vector_down] * 36, [-i * 10 for i in range(36)])) # 需对相位取负结果才和之前一样,原因未知?? args_2 = list(zip([vector_up] * 36, [-i * 10 for i in range(36)])) para[i * 4] = [i for i in map(self.spin_vec, args_1)] para[i * 4 + 1] = [i for i in map(self.spin_vec, args_2)] center_down = pre.circ(pre.gcra(r[i * 4 + 2], runout[i * 4 + 2], 0)) center_up = pre.circ(pre.gcra(r[i * 4 + 3], runout[i * 4 + 3], 0)) args_3 = list(zip([center_down] * 36, [i * 10 for i in range(36)])) args_4 = list(zip([center_up] * 36, [i * 10 for i in range(36)])) para[i * 4 + 2] = [i for i in map(self.spin_cen, args_3)] para[i * 4 + 3] = [i for i in map(self.spin_cen, args_4)] return para
def cen(self, args): runout = args[0] r = args[1] theta = args[2] res = pre.circ(pre.gcra(r, pre.spin(runout, theta), 0)) return res
def pene_f(part1_runout, part2_runout): penetration = [] for i in range(len(part1_runout)): penetration.append(part1_runout[i] - part2_runout[i]) return max(penetration) penetration_f = pene_f(part1_flat_runout_up, part2_flat_runout_down) penetration_ff = pene_f(new_part1_flat_node_data_up[:, 3], new_part2_flat_node_data_down[:, 3]) """np.savetxt("G:/19.12.25whole model (less grids)/check_new_flat_data.csv", new_part2_flat_node_data, delimiter=',')""" """============================================================shut up============================================================""" part1_radial_runout_down = pre.idata(ad_part1_runout, [4]) part1_radial_runout_coordinate_down = pre.gcra(80 / 2, part1_radial_runout_down, 0) part1_circle_center_down = pre.circ(part1_radial_runout_coordinate_down) part1_radial_node_data_down = pre.idata(ad_part1_radial_node_down, [0, 1, 2, 3]) new_part1_radial_node_data_down = rep.rrure2(part1_radial_runout_down, part1_radial_node_data_down) part1_radial_runout_up = -pre.idata(ad_part1_runout, [2]) part1_radial_runout_coordinate_up = pre.gcra(200 / 2, part1_radial_runout_up, 0) part1_circle_center_up = pre.circ(part1_radial_runout_coordinate_up) part1_radial_node_data_up = pre.idata(ad_part1_radial_node_up, [0, 1, 2, 3]) new_part1_radial_node_data_up = rep.rrure2(part1_radial_runout_up, part1_radial_node_data_up) part2_radial_runout_down = pre.idata(ad_part2_runout, [3]) part2_radial_runout_coordinate_down = pre.gcra(200 / 2,
start2 = time.perf_counter() #两零件高度 H1 = 805 - 118 H2 = 328 + 65 - 5 """==================================================================测量位置====================================================================""" """==================================================================(1)止口=====================================================================""" part1_radial_data_x_down = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(90)/Step8——仿真结果/1.13_server_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/基准止口x.txt", sep='\t', usecols=[0,1,2,4])) part1_radial_data_y_down = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(90)/Step8——仿真结果/1.13_server_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/基准止口y.txt", sep='\t', usecols=[0,1,2,4])) part2_radial_data_x_up = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(90)/Step8——仿真结果/1.13_server_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/位置止口x.txt", sep='\t', usecols=[0,1,2,4])) part2_radial_data_y_up = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(90)/Step8——仿真结果/1.13_server_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/位置止口y.txt", sep='\t', usecols=[0,1,2,4])) new_part1_radial_data_down = np.vstack((part1_radial_data_x_down[:, 1] + part1_radial_data_x_down[:, 3], part1_radial_data_y_down[:, 2] + part1_radial_data_y_down[:, 3])).T new_part2_radial_data_up = np.vstack((part2_radial_data_x_up[:, 1] + part2_radial_data_x_up[:, 3], part2_radial_data_y_up[:, 2] + part2_radial_data_y_up[:, 3])).T part1_circle_center_down = pre.circ(new_part1_radial_data_down) part2_circle_center_up = pre.circ(new_part2_radial_data_up) """==================================================================(2)端面====================================================================""" part1_flat_data_down = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(90)/Step8——仿真结果/1.13_server_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/基准端面.txt", sep='\t')) part2_flat_data_up = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(90)/Step8——仿真结果/1.13_server_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/位置端面.txt", sep='\t')) new_part1_flat_data_down = np.vstack((part1_flat_data_down[:, 1], part1_flat_data_down[:, 2], part1_flat_data_down[:, 3] + part1_flat_data_down[:, 4] + H1)).T new_part2_flat_data_up = np.vstack((part2_flat_data_up[:, 1], part2_flat_data_up[:, 2], part2_flat_data_up[:, 3] + part2_flat_data_up[:, 4] - H2)).T part1_normal_vector_down = pre.planefit(new_part1_flat_data_down) part2_normal_vector_up = pre.planefit(new_part2_flat_data_up) """==================================================================拟合矩阵====================================================================""" results = pre.eccentric(part1_circle_center_down[1], part1_circle_center_down[2], part2_circle_center_up[1], part2_circle_center_up[2], part1_normal_vector_down[0], part1_normal_vector_down[1], part1_normal_vector_down[2], part2_normal_vector_up[0], part2_normal_vector_up[1], part2_normal_vector_up[2], H1 + H2)
part1_flat_runout_up = pre.idata(ad_part1_runout, [1]) part1_flat_runout_coordinate_up = pre.gcfl(206.5 / 2, part1_flat_runout_up, 0) part1_normal_vector_up = pre.planefit(part1_flat_runout_coordinate_up) part1_flat_node_data_up = pre.idata(ad_part1_flat_node_up, [0,1,2,3]) new_part1_flat_node_data_up = rep.frure(206.5 / 2, part1_normal_vector_up[0], part1_normal_vector_up[1], part1_normal_vector_up[2], part1_normal_vector_up[3], part1_flat_runout_up, part1_flat_node_data_up, 0) new_part1_flat_runout_up = new_part1_flat_node_data_up[:, 3] part2_flat_runout_down = -pre.idata(ad_part2_runout, [4]) part2_flat_runout_coordinate_down = pre.gcfl(206.5 / 2, part2_flat_runout_down, 0) part2_normal_vector_down = pre.planefit(part2_flat_runout_coordinate_down) part2_flat_node_data_down = pre.idata(ad_part2_flat_node_down, [0,1,2,3]) new_part2_flat_node_data_down = rep.frure(206.5 / 2, part2_normal_vector_down[0], part2_normal_vector_down[1], part2_normal_vector_down[2], part2_normal_vector_down[3], part2_flat_runout_down, part2_flat_node_data_down, 0) new_part2_flat_runout_down = new_part2_flat_node_data_down[:, 3] part1_radial_runout_up = -pre.idata(ad_part1_runout, [2]) part1_radial_runout_coordinate_up = pre.gcra(200 / 2, part1_radial_runout_up, 0) part1_circle_center_up = pre.circ(part1_radial_runout_coordinate_up) part1_radial_node_data_up = pre.idata(ad_part1_radial_node_up, [0,1,2,3]) new_part1_radial_runout_up = rep.rrure3(part1_radial_runout_up, part1_radial_node_data_up) part2_radial_runout_down = pre.idata(ad_part2_runout, [3]) part2_radial_runout_coordinate_down = pre.gcra(200 / 2, part2_radial_runout_down, 0) part2_circle_center_down = pre.circ(part2_radial_runout_coordinate_down[:, 0:3]) part2_radial_node_data_down = pre.idata(ad_part2_radial_node_down, [0,1,2,3]) new_part2_radial_runout_down = rep.rrure3(part2_radial_runout_down, part2_radial_node_data_down) dif_f = np.stack((new_part1_flat_runout_up, new_part2_flat_runout_down, new_part1_flat_runout_up - new_part2_flat_runout_down), axis=1) dif_r = np.stack((new_part1_radial_runout_up, new_part2_radial_runout_down, new_part1_radial_runout_up - new_part2_radial_runout_down), axis=1) #joint #端面 part1_flat_data_up = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(0)/Step8——仿真结果/1.8_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/part1端面.txt", sep='\t')) part2_flat_data_down = np.array(pd.read_csv("G:/19.12.25whole model (less grids)/Step5----replaced(0)/Step8——仿真结果/1.8_inp4圆心对准,有跳动,过盈0,大变形,加重力, 弱弹簧3300N(frictional)/part2端面.txt", sep='\t'))