def indices_first_intersection(axf, ayf, azf)
      i, j, k = nil, nil, nil
      # In cases of perpendicular ray travel, one or two arguments may be
      # -INFINITY, which must be excluded when searching for the minimum value:
      af_min = alpha_min([axf, ayf, azf])
      sorted_real_alpha_values([axf, ayf, azf]).each do |a|
        alpha_mean = (a + @alpha_min) * 0.5
        i0 = phi_x(alpha_mean)
        j0 = phi_y(alpha_mean)
        k0 = phi_z(alpha_mean)
        if indices_within_voxel_space(i0, j0, k0)
          i, j, k = i0, j0, k0
          break
        end
      end
      return i, j, k
    end
def indices_first_intersection(axf, ayf, azf)
      i, j, k = nil, nil, nil
      # In cases of perpendicular ray travel, one or two arguments may be
      # -INFINITY, which must be excluded when searching for the minimum value:
      af_min = alpha_min([axf, ayf, azf])
      sorted_real_alpha_values([axf, ayf, azf]).each do |a|
        alpha_mean = (a + @alpha_min) * 0.5
        i0 = phi_x(alpha_mean)
        j0 = phi_y(alpha_mean)
        k0 = phi_z(alpha_mean)
        if indices_within_voxel_space(i0, j0, k0)
          i, j, k = i0, j0, k0
          break
        end
      end
      return i, j, k
    end
Determines the voxel indices of the first intersection.

 @param [Float] axf a directional x alpha value for the ray's first intersection in voxel space
 @param [Float] ayf a directional y alpha value for the ray's first intersection in voxel space
 @param [Float] azf a directional z alpha value for the ray's first intersection in voxel space
 @return [Array<Integer>] voxel indices i, j and k of the first intersection