def _get_f_r_s(axis_point_1,axis_point_2, moving_coor, fixed_coor): fc_proj = project_point_on_axis(axis_point_1, axis_point_2, fixed_coor) mc_proj = project_point_on_axis(axis_point_1, axis_point_2, moving_coor) f = (fixed_coor[0]-fc_proj[0],fixed_coor[1]-fc_proj[1],fixed_coor[2]-fc_proj[2]) r = (moving_coor[0]-mc_proj[0],moving_coor[1]-mc_proj[1],moving_coor[2]-mc_proj[2]) ap_21 = (axis_point_2[0]-axis_point_1[0], axis_point_2[1]-axis_point_1[1], axis_point_2[2]-axis_point_1[2]) r_norm = math.sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]) r_home = flex.vec3_double([(r[0]/r_norm, r[1]/r_norm, r[2]/r_norm)]) ap_21_norm = math.sqrt(ap_21[0]*ap_21[0]+ap_21[1]*ap_21[1]+ap_21[2]*ap_21[2]) theta_home = flex.vec3_double([(ap_21[0]/ap_21_norm, ap_21[1]/ap_21_norm, ap_21[2]/ap_21_norm)]) tt = theta_home.cross(r_home) s_home = tt*(1/tt.norm()) return flex.vec3_double([f]), s_home, r_norm, r_home