Source code for hop.hexabundle_allocation.general_operations.geometry_intersections.segment_with_segment


# calculating intersection point between a vertical segment and slope segment
[docs]def intersection_slope_segment_and_vertical_segment(vertical_segment, slope_segment): # calculating intersection point of vertical and slope segments line = slope_segment.create_line_equation() intersection_point_y = line.calculate_y_from_x(vertical_segment.start_point[0]) intersection_point = [vertical_segment.start_point[0],intersection_point_y] # checking whether intersection point lies on both vertical and slope segments if vertical_segment.point_is_on_segment(intersection_point): if slope_segment.point_is_on_segment(intersection_point): return intersection_point else: return None else: return None
# calculating intersection between two segments
[docs]def segments_intersection(segment1,segment2): intersection_point =[] # intersection calculation for either one vertical or both vertical segments if segment1.vertical(): if segment2.vertical(): if segment1.start_point[0] == segment2.start_point[0]: ### add check if point same segments intersection_point = [segment2.start_point[0], None] else: intersection_point = intersection_slope_segment_and_vertical_segment(segment1,segment2) # intersection calculation for one vertical and one slope segment elif segment2.vertical(): intersection_point = intersection_slope_segment_and_vertical_segment(segment2,segment1) # intersection calculation for both slope segments by creating line equations else: line1 = segment1.create_line_equation() line2 = segment2.create_line_equation() if line1.slope != line2.slope: intersection_point_x = (line2.origin - line1.origin) / (line1.slope - line2.slope) intersection_point_y = line1.slope * intersection_point_x + line1.origin if segment1.point_is_on_segment([intersection_point_x,intersection_point_y]): if segment2.point_is_on_segment([intersection_point_x,intersection_point_y]): intersection_point = [intersection_point_x,intersection_point_y] return intersection_point