Преобразование углов вне естественного диапазона (для тета: от 0 до 180 градусов) в эквивалентный угол внутри этого диапазона
Как я могу сократить следующий код? Это простой код, который смотрит на значение угла и убеждается, что они не выходят за пределы диапазона. Проблема в том, что, хотя это и делает работу, я действительно хочу что-то более питонное, более легкое для работы и менее громоздкое для написания.
theta_min_lim = 0.0
theta_max_lim = 180.0
if theta_min<theta_min_lim:
new_theta_min = theta_max_lim-abs(theta_min)
theta_row_index_along_new = np.array(np.where(sph_pos_count[:,1]>=new_theta_min)).flatten()
theta_row_index_along = np.concatenate((theta_row_index_along_new, theta_row_index_along))
if theta_max>theta_max_lim:
new_theta_max = theta_max-theta_max_lim
theta_row_index_along_new = np.array(np.where(sph_pos_count[:,1]<=new_theta_max)).flatten()
theta_row_index_along = np.concatenate((theta_row_index_along_new, theta_row_index_along))
if phi_min<phi_min_lim:
new_phi_min = phi_max_lim-abs(phi_min)
phi_row_index_along_new = np.array(np.where(sph_pos_count[:,2]>=new_phi_min)).flatten()
phi_row_index_along = np.concatenate((phi_row_index_along_new, phi_row_index_along))
if phi_max>phi_max_lim:
new_phi_max = phi_max-phi_max_lim
phi_row_index_along_new = np.array(np.where(sph_pos_count[:,2]<=new_phi_max)).flatten()
phi_row_index_along = np.concatenate((phi_row_index_along_new, phi_row_index_along))
#theta_row_index_along = np.concatenate(theta_row_index_along_new, theta_row_index_along)
row_index_along = np.intersect1d(theta_row_index_along,phi_row_index_along)
sph_pos_count_along = sph_pos_count[row_index_along]
#GIving range for theta and phi in the direction along the velocity
theta_min_opp = vtheta_opp - 2.0*max(sph_cord[:,1])/dtheta
theta_max_opp = vtheta_opp + 2.0*max(sph_cord[:,1])/dtheta
phi_min_opp = vphi_opp - 2.0*max(sph_cord[:,2])/dphi
phi_max_opp = vphi_opp + 2.0*max(sph_cord[:,2])/dphi
#Finding index of spheres opposite to the direction of motion
theta_row_index_opp = np.array(np.where(np.logical_and(sph_pos_count[:,1]>=theta_min_opp, sph_pos_count[:,1]<=theta_max_opp))).flatten()
phi_row_index_opp = np.array(np.where(np.logical_and(sph_pos_count[:,2]>=phi_min_opp, sph_pos_count[:,2]<=phi_max_opp))).flatten()
if theta_min_opp<theta_min_lim:
new_theta_min_opp = theta_max_lim-abs(theta_min_opp)
theta_row_index_opp_new = np.array(np.where(sph_pos_count[:,1]>=new_theta_min_opp)).flatten()
theta_row_index_opp = np.concatenate((theta_row_index_opp_new, theta_row_index_opp))
if theta_max_opp>theta_max_lim:
new_theta_max_opp = theta_max_opp-theta_max_lim
theta_row_index_opp_new = np.array(np.where(sph_pos_count[:,1]<=new_theta_max_opp)).flatten()
theta_row_index_opp = np.concatenate((theta_row_index_opp_new, theta_row_index_opp))
if phi_min_opp<phi_min_lim:
new_phi_min_opp = phi_max_lim-abs(phi_min_opp)
phi_row_index_opp_new = np.array(np.where(sph_pos_count[:,2]>=new_phi_min_opp)).flatten()
phi_row_index_opp = np.concatenate((phi_row_index_opp_new, phi_row_index_opp))
if phi_max_opp>phi_max_lim:
new_phi_max_opp = phi_max_opp-phi_max_lim
phi_row_index_opp_new = np.transpose(np.where(sph_pos_count[:,2]<=new_phi_max_opp)).flatten()
phi_row_index_opp = np.concatenate((phi_row_index_opp_new, phi_row_index_opp))