def divide_region(radius_range, angle_range, z_range, point): delta_angle = (angle_range[1] - angle_range[0]) / D_ANGLE delta_height = (z_range[1] - z_range[0]) / D_HEIGHT delta_radius = (radius_range[1] - radius_range[0]) / D_RADIUS angle_array = [] for i in range(D_ANGLE): #print('angle', i) angle_array.append(angle_range[0] + i * delta_angle) angle_array.append(angle_range[1]) radius_array = [] for i in range(D_RADIUS): #print('radius', i) radius_array.append(radius_range[0] + i * delta_radius) radius_array.append(radius_range[1]) height_array = [] for i in range(D_HEIGHT): #print('height', i) height_array.append(z_range[0] + i * delta_height) height_array.append(z_range[1]) # check with region does the point belong to r_idx = ap.check_interval_idx_single_value(point[0], radius_array) theta_idx = ap.check_interval_idx_single_value(point[1] * 180 / np.pi, angle_array) z_idx = ap.check_interval_idx_single_value(point[2], height_array) # due to the definition, r_region is always divided into three sub-regions (inner, occlusal, outer) # which gives # r_idx = 0: inner # r_idx = 1: outer # r_idx = 2: occlusal # # theta_region and height_region are defined differently # theta_idx = 0: outside # theta_idx > D_ANGLE: outside # theta_idx: the 'theta_idx'th region in theta regions. I.E., theta_idx = 2, the 2nd theta region region_number = -1 # means point is outside of the check region if r_idx == 0: # inner if 0 < theta_idx <= D_ANGLE and 0 < z_idx <= D_HEIGHT: region_number = (theta_idx - 1) * D_HEIGHT + z_idx elif r_idx == 1: # occlusal if 0 < theta_idx <= D_ANGLE: region_number = D_ANGLE * D_HEIGHT + theta_idx else: # outer if 0 < theta_idx <= D_ANGLE and 0 < z_idx <= D_HEIGHT: region_number = D_ANGLE * D_HEIGHT + D_ANGLE + ( theta_idx - 1) * D_HEIGHT + z_idx return region_number
def divide_region_surface_matching(angle_range, point): # check with region does the point belong to theta_idx = ap.check_interval_idx_single_value(point[1] * 180 / np.pi, angle_range) # theta_idx = 1, in the range return theta_idx