def compute_reflections_two_segments(ind: Component, r_factor: float): """ :param ind: :param r_factor: :return: """ ind.compute_right_segment() ind.compute_left_segment() no_of_reflections = 0 for ray in ind.original_rays: ray_intensity = ray.intensity continue_left = True continue_right = True previous_i_r = Point(0, 0) previous_i_l = Point(0, 0) ray.ray_array = [ray.ray] while continue_left or continue_right: continue_left, ray.ray_array, previous_i_r, ray_intensity = \ compute_reflection_segment(ray.ray_array, ind.right_segment, previous_i_r, ray_intensity, r_factor) if continue_left: no_of_reflections += 1 continue_right, ray.ray_array, previous_i_l, ray_intensity = \ compute_reflection_segment(ray.ray_array, ind.left_segment, previous_i_l, ray_intensity, r_factor) if continue_right: no_of_reflections += 1 ind.no_of_reflections = no_of_reflections
def compute_reflections_two_segments(ind: Component, r_factor: float): """ Compute reflections for all rays in scenario with two segments. For each ray compute reflections from right and left segment. Continue while there exist any. Reflections are recorder in ray_array from each ray :param ind: Individual :param r_factor: Reflective factor from parameters """ ind.compute_right_segment() ind.compute_left_segment() no_of_reflections = 0 for ray in ind.original_rays: ray_intensity = ray.original_intensity continue_left = True continue_right = True previous_i_r = Point(0, 0) previous_i_l = Point(0, 0) ray.ray_array = [ray.ray] while continue_left or continue_right: continue_left, ray.ray_array, previous_i_r, ray_intensity = \ compute_reflection_segment(ray.ray_array, ind.right_segment, previous_i_r, ray_intensity, r_factor) if continue_left: no_of_reflections += 1 continue_right, ray.ray_array, previous_i_l, ray_intensity = \ compute_reflection_segment(ray.ray_array, ind.left_segment, previous_i_l, ray_intensity, r_factor) if continue_right: no_of_reflections += 1 ray.intensity = ray_intensity ind.no_of_reflections = no_of_reflections
def compute_reflections_two_segments_unused(ind: Component, r_factor: float): ind.compute_right_segment() ind.compute_left_segment() no_of_reflections = 0 for ray in ind.original_rays: ray_intensity = ray.intensity continue_left = True continue_right = True previous_i_r = Point(0, 0) previous_i_l = Point(0, 0) ray.ray_array = [ray.ray] while continue_left or continue_right: continue_left = False continue_right = False last_ray = ray.ray_array[-1] intersection_r = last_ray.intersection(ind.right_segment) if intersection_r and intersection_r[0] != previous_i_r: previous_i_r = intersection_r[0] reflected_ray, ray_intensity = compute_reflection( last_ray, ind.right_segment, ray_intensity, r_factor) no_of_reflections += 1 new_ray_array = ray.ray_array[:-1] new_ray_array.append(Ray(last_ray.p1, intersection_r[0])) new_ray_array.append(reflected_ray) ray.ray_array = new_ray_array ray.intensity = ray_intensity continue_left = True last_ray = ray.ray_array[-1] intersection_l = last_ray.intersection(ind.left_segment) if intersection_l and intersection_l[0] != previous_i_l: previous_i_l = intersection_l[0] reflected_ray, ray_intensity = compute_reflection( last_ray, ind.left_segment, ray_intensity, r_factor) no_of_reflections += 1 new_ray_array = ray.ray_array[:-1] new_ray_array.append(Ray(last_ray.p1, intersection_l[0])) new_ray_array.append(reflected_ray) ray.ray_array = new_ray_array ray.intensity = ray_intensity continue_right = True ind.no_of_reflections = no_of_reflections