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
Esempio n. 2
0
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