def test_issue_12598(): r1 = Ray(Point(0, 1), Point(0.98, 0.79).n(2)) r2 = Ray(Point(0, 0), Point(0.71, 0.71).n(2)) assert str(r1.intersection(r2)[0]) == 'Point2D(0.82, 0.82)' l1 = Line((0, 0), (1, 1)) l2 = Segment((-1, 1), (0, -1)).n(2) assert str(l1.intersection(l2)[0]) == 'Point2D(-0.33, -0.33)' l2 = Segment((-1, 1), (-1/2, 1/2)).n(2) assert not l1.intersection(l2)
def cast(self): # generate line line = Line(self.current, self.direction) shortest_ray = None intersecting_segment = None intersection_point = None l = math.inf for segment in self.mirrors: # intersect line with segments from triangle mirror_point = line.intersection(segment) if mirror_point != []: mirror_point = mirror_point[0] ray = Segment(self.current, mirror_point) if isinstance(ray, Segment): if ray.length < l: l = ray.length shortest_ray = ray intersecting_segment = segment intersection_point = mirror_point # calculate angle between ray and segment next_ray = None if intersecting_segment is not None: incidenting_angle = shortest_ray.angle_between(intersecting_segment) corrected_incidenting_angle = incidenting_angle % (pi/2) print("ray is intersecting with an angle: ", math.degrees(incidenting_angle), "corrected", math.degrees(corrected_incidenting_angle)) next_ray = shortest_ray.rotate((math.pi/2-corrected_incidenting_angle)*2, pt=intersection_point) self.current = next_ray.points[0] self.direction = next_ray.points[1] return [shortest_ray, next_ray]
def test_symbolic_intersect(): # Issue 7814. circle = Circle(Point(x, 0), y) line = Line(Point(k, z), slope=0) assert line.intersection(circle) == [ Point(x + sqrt((y - z) * (y + z)), z), Point(x - sqrt((y - z) * (y + z)), z), ]
def test_symbolic_intersect(): x = Symbol('x', real=True) y = Symbol('y', real=True) z = Symbol('z', real=True) k = Symbol('k', real=True) # Issue 7814. circle = Circle(Point(x, 0), y) line = Line(Point(k, z), slope=0) assert line.intersection(circle) == [ Point(x - sqrt(y**2 - z**2), z), Point(x + sqrt(y**2 - z**2), z)]
def intersection_of_vector_with_triangle(self): A,B,C = self.get_trinangle_points() S_AB = Segment(A,B) S_AC = Segment(A,C) S_BC = Segment(B,C) P1, P2 = self.two_points_from_vector(self.vector()) L_vector = Line(P1, P2) mirror_point = L_vector.intersection(S_AB) return mirror_point
def test_symbolic_intersect(): x = Symbol('x', real=True) y = Symbol('y', real=True) z = Symbol('z', real=True) k = Symbol('k', real=True) # Issue 7814. circle = Circle(Point(x, 0), y) line = Line(Point(k, z), slope=0) assert line.intersection(circle) == [ Point(x - sqrt(y**2 - z**2), z), Point(x + sqrt(y**2 - z**2), z) ]
def findcells(x0, x1, z0, z1, lines): clusCells = [] clusPos = [] nonClusCells = [] stop = True vertices = findPointsofRect(x0, x1, z0, z1) segment1 = Segment(vertices[0], vertices[1]) segment2 = Segment(vertices[1], vertices[3]) segment3 = Segment(vertices[3], vertices[2]) segment4 = Segment(vertices[2], vertices[0]) for i in range(len(lines)): line = lines[i] if (line[0][0] == 0 and line[0][1] == 0): nonClusCells.append([(0, 0)]) continue x1, x2, y1, y2 = findLine(line[0][0], line[0][1]) lineF = Line((x1, y1), (x2, y2)) # I don't think finding intersection is reqd i1 = lineF.intersection(segment1) i2 = lineF.intersection(segment2) i3 = lineF.intersection(segment3) i4 = lineF.intersection(segment4) if (not (len(i1) == 0 and len(i2) == 0 and len(i3) == 0 and len(i4) == 0)): clusCells.append(line) clusPos.append(i) nonClusCells.append([(0, 0)]) stop = False else: nonClusCells.append(line) return clusCells, clusPos, np.array(nonClusCells), stop, vertices
def test_symbolic_intersect(): # Issue 7814. circle = Circle(Point(x, 0), y) line = Line(Point(k, z), slope=0) assert line.intersection(circle) == [Point(x + sqrt((y - z) * (y + z)), z), Point(x - sqrt((y - z) * (y + z)), z)]
def generate_map(): screen.fill((0, 0, 0)) points = generate_random_points(num_points, width, height, buf) #for x, y in points: # pygame.draw.circle(screen, WHITE, (x,y), 2, 1) voronoi_context = voronoi(points) voronoi_point_dict = {} point_to_segment_dict = {} segments = [] vertices = [] top_l = Point(0,0) top_r = Point(width,0) bottom_l = Point(0, height) bottom_r = Point(width, height) top = Line(top_l, top_r) left = Line(top_l, bottom_l) right = Line(top_r, bottom_r) bottom = Line(bottom_l, bottom_r) boundaries = [top, right, bottom, left] for edge in voronoi_context.edges: il, i1, i2 = edge # index of line, index of vertex 1, index of vertex 2 line_color = RED vert1 = None vert2 = None print_line = True if i1 is not -1 and i2 is not -1: vert1 = voronoi_context.vertices[i1] vert2 = voronoi_context.vertices[i2] else: line_point = None if i1 is -1: line_p = voronoi_context.vertices[i2] if i2 is -1: line_p = voronoi_context.vertices[i1] line_point = Point(line_p[0], line_p[1]) line = voronoi_context.lines[il] p1 = None p2 = None if line[1] == 0: p1 = line_point p2 = Point(line[0]/line[2], 1) else: p1 = Point(0, line[2]/line[1]) p2 = line_point l = Line(p1, p2) top_intersect = l.intersection(top) bottom_intersect = l.intersection(bottom) right_intersect = l.intersection(right) left_intersect = l.intersection(left) distances = [] top_dist = None bottom_dist = None right_dist = None left_dist = None if len(top_intersect) != 0: top_dist = abs(line_point.distance(top_intersect[0])) distances.append(top_dist) if len(bottom_intersect) != 0 : bottom_dist = abs(line_point.distance(bottom_intersect[0])) distances.append(bottom_dist) if len(right_intersect) != 0: right_dist = abs(line_point.distance(right_intersect[0])) distances.append(right_dist) if len(left_intersect) != 0: left_dist = abs(line_point.distance(left_intersect[0])) distances.append(left_dist) vert1 = line_p v2 = None if top_dist == min(distances): v2 = top_intersect[0] elif bottom_dist == min(distances): v2 = bottom_intersect[0] elif right_dist == min(distances): v2 = right_intersect[0] elif left_dist == min(distances): v2 = left_intersect[0] else: v2 = Point(0, 0) vert2 = (v2.x, v2.y) if vert1[0] < 0 or vert1[1] < 0 or vert2[0] < 0 or vert2[1] < 0 or vert1[0] > width or vert1[1] > height or vert2[0] > width or vert2[1] > height: print_line = False if print_line: vert1, vert2 = adjust_out_of_bounds_points(vert1, vert2, boundaries) seg = None if vert1 == None or vert2 == None: print_line = False if print_line: vert1_p = Point(vert1) vert2_p = Point(vert2) seg = Segment(vert1_p, vert2_p) segments.append(seg) if not vert1_p in voronoi_point_dict: voronoi_point_dict[vert1_p] = [] if not vert2_p in voronoi_point_dict: voronoi_point_dict[vert2_p] = [] voronoi_point_dict[vert1_p].append(vert2_p) voronoi_point_dict[vert2_p].append(vert1_p) if not vert1_p in point_to_segment_dict: point_to_segment_dict[vert1_p] = [] if not vert2_p in point_to_segment_dict: point_to_segment_dict[vert2_p] = [] point_to_segment_dict[vert1_p].append(seg) point_to_segment_dict[vert2_p].append(seg) pygame.draw.line(screen, line_color, vert1, vert2, 1) pygame.display.flip() top_intersects = [] bottom_intersects = [] right_intersects = [] left_intersects = [] for seg in segments: if seg.p1.y <= 1: top_intersects.append(seg.p1) if seg.p2.y <= 1: top_intersects.append(seg.p2) if seg.p1.x >= width -1: right_intersects.append(seg.p1) if seg.p2.x >= width-1: right_intersects.append(seg.p2) if seg.p1.x <= 1: left_intersects.append(seg.p1) if seg.p2.x <= 1: left_intersects.append(seg.p2) if seg.p1.y >= height-1: bottom_intersects.append(seg.p1) if seg.p2.y >= height-1: bottom_intersects.append(seg.p2) top_intersects = sorted(top_intersects, key=lambda point: point.x) bottom_intersects = sorted(bottom_intersects, key=lambda point: point.x) left_intersects = sorted(left_intersects, key=lambda point: point.y) right_intersects = sorted(right_intersects, key=lambda point: point.y) for i in range(0, 4): intersect = None prev_vertex = None final_vertex = None if i == 0: prev_vertex = top_l intersect = top_intersects intersect.append(top_r) if i == 1: prev_vertex = bottom_l intersect = bottom_intersects intersect.append(bottom_r) if i == 2: prev_vertex = top_l intersect = left_intersects intersect.append(bottom_l) if i == 3: prev_vertex = top_r intersect = right_intersects intersect.append(bottom_r) if not prev_vertex in voronoi_point_dict: voronoi_point_dict[prev_vertex] = [] if not final_vertex in voronoi_point_dict: voronoi_point_dict[final_vertex] = [] if not prev_vertex in point_to_segment_dict: point_to_segment_dict[prev_vertex] = [] if not final_vertex in point_to_segment_dict: point_to_segment_dict[final_vertex] = [] for vertex in intersect: if not vertex in voronoi_point_dict: voronoi_point_dict[vertex] = [] if not prev_vertex in voronoi_point_dict: voronoi_point_dict[prev_vertex] = [] s = Segment(prev_vertex, vertex) voronoi_point_dict[vertex].append(prev_vertex) voronoi_point_dict[prev_vertex].append(vertex) if not vertex in point_to_segment_dict: point_to_segment_dict[vertex] = [] if not prev_vertex in point_to_segment_dict: point_to_segment_dict[prev_vertex] = [] point_to_segment_dict[vertex].append(s) point_to_segment_dict[prev_vertex].append(s) prev_vertex = vertex try: polygons, segments_to_polygons = generate_polygons(voronoi_point_dict, segments, points, point_to_segment_dict) except Exception as e: print e print "crashed" while 1: """ helllo""" for seg, gons in segments_to_polygons.iteritems(): for gon in gons: gon.connect_adjacent_nodes(gons) for polygon in polygons: for node in polygon.adjacent_nodes: s = Segment(node.center, polygon.center) draw_segment(s, WHITE) highest_points_of_elevation = [] frontiers = [] for i in range(0, number_of_peaks): p = random.choice(polygons) p.elevation = max_elevation highest_points_of_elevation.append(p) frontiers.append(set(p.adjacent_nodes)) marked_polygons = set([]) elevation = max_elevation while len(marked_polygons) < num_points: elevation -= 1 for i in range(0, number_of_peaks): new_frontier = set([]) while len(frontiers[i]) > 0: node = frontiers[i].pop() node.elevation = elevation draw_point(node.center, ORANGE) for n in node.adjacent_nodes: if n not in marked_polygons: new_frontier.add(n) marked_polygons.add(node) frontiers[i] = new_frontier for polygon in polygons: if polygon.elevation <= 0: vertices = [] for edge in polygon.edge_list: p = (edge.x, edge.y) vertices.append(p) pygame.draw.polygon(screen, BLUE, vertices, 0) pygame.display.flip() pygame.display.flip()
def generate_map(): screen.fill((0, 0, 0)) points = generate_random_points(num_points, width, height, buf) #for x, y in points: # pygame.draw.circle(screen, WHITE, (x,y), 2, 1) voronoi_context = voronoi(points) voronoi_point_dict = {} point_to_segment_dict = {} segments = [] vertices = [] top_l = Point(0, 0) top_r = Point(width, 0) bottom_l = Point(0, height) bottom_r = Point(width, height) top = Line(top_l, top_r) left = Line(top_l, bottom_l) right = Line(top_r, bottom_r) bottom = Line(bottom_l, bottom_r) boundaries = [top, right, bottom, left] for edge in voronoi_context.edges: il, i1, i2 = edge # index of line, index of vertex 1, index of vertex 2 line_color = RED vert1 = None vert2 = None print_line = True if i1 is not -1 and i2 is not -1: vert1 = voronoi_context.vertices[i1] vert2 = voronoi_context.vertices[i2] else: line_point = None if i1 is -1: line_p = voronoi_context.vertices[i2] if i2 is -1: line_p = voronoi_context.vertices[i1] line_point = Point(line_p[0], line_p[1]) line = voronoi_context.lines[il] p1 = None p2 = None if line[1] == 0: p1 = line_point p2 = Point(line[0] / line[2], 1) else: p1 = Point(0, line[2] / line[1]) p2 = line_point l = Line(p1, p2) top_intersect = l.intersection(top) bottom_intersect = l.intersection(bottom) right_intersect = l.intersection(right) left_intersect = l.intersection(left) distances = [] top_dist = None bottom_dist = None right_dist = None left_dist = None if len(top_intersect) != 0: top_dist = abs(line_point.distance(top_intersect[0])) distances.append(top_dist) if len(bottom_intersect) != 0: bottom_dist = abs(line_point.distance(bottom_intersect[0])) distances.append(bottom_dist) if len(right_intersect) != 0: right_dist = abs(line_point.distance(right_intersect[0])) distances.append(right_dist) if len(left_intersect) != 0: left_dist = abs(line_point.distance(left_intersect[0])) distances.append(left_dist) vert1 = line_p v2 = None if top_dist == min(distances): v2 = top_intersect[0] elif bottom_dist == min(distances): v2 = bottom_intersect[0] elif right_dist == min(distances): v2 = right_intersect[0] elif left_dist == min(distances): v2 = left_intersect[0] else: v2 = Point(0, 0) vert2 = (v2.x, v2.y) if vert1[0] < 0 or vert1[1] < 0 or vert2[0] < 0 or vert2[ 1] < 0 or vert1[0] > width or vert1[1] > height or vert2[ 0] > width or vert2[1] > height: print_line = False if print_line: vert1, vert2 = adjust_out_of_bounds_points(vert1, vert2, boundaries) seg = None if vert1 == None or vert2 == None: print_line = False if print_line: vert1_p = Point(vert1) vert2_p = Point(vert2) seg = Segment(vert1_p, vert2_p) segments.append(seg) if not vert1_p in voronoi_point_dict: voronoi_point_dict[vert1_p] = [] if not vert2_p in voronoi_point_dict: voronoi_point_dict[vert2_p] = [] voronoi_point_dict[vert1_p].append(vert2_p) voronoi_point_dict[vert2_p].append(vert1_p) if not vert1_p in point_to_segment_dict: point_to_segment_dict[vert1_p] = [] if not vert2_p in point_to_segment_dict: point_to_segment_dict[vert2_p] = [] point_to_segment_dict[vert1_p].append(seg) point_to_segment_dict[vert2_p].append(seg) pygame.draw.line(screen, line_color, vert1, vert2, 1) pygame.display.flip() top_intersects = [] bottom_intersects = [] right_intersects = [] left_intersects = [] for seg in segments: if seg.p1.y <= 1: top_intersects.append(seg.p1) if seg.p2.y <= 1: top_intersects.append(seg.p2) if seg.p1.x >= width - 1: right_intersects.append(seg.p1) if seg.p2.x >= width - 1: right_intersects.append(seg.p2) if seg.p1.x <= 1: left_intersects.append(seg.p1) if seg.p2.x <= 1: left_intersects.append(seg.p2) if seg.p1.y >= height - 1: bottom_intersects.append(seg.p1) if seg.p2.y >= height - 1: bottom_intersects.append(seg.p2) top_intersects = sorted(top_intersects, key=lambda point: point.x) bottom_intersects = sorted(bottom_intersects, key=lambda point: point.x) left_intersects = sorted(left_intersects, key=lambda point: point.y) right_intersects = sorted(right_intersects, key=lambda point: point.y) for i in range(0, 4): intersect = None prev_vertex = None final_vertex = None if i == 0: prev_vertex = top_l intersect = top_intersects intersect.append(top_r) if i == 1: prev_vertex = bottom_l intersect = bottom_intersects intersect.append(bottom_r) if i == 2: prev_vertex = top_l intersect = left_intersects intersect.append(bottom_l) if i == 3: prev_vertex = top_r intersect = right_intersects intersect.append(bottom_r) if not prev_vertex in voronoi_point_dict: voronoi_point_dict[prev_vertex] = [] if not final_vertex in voronoi_point_dict: voronoi_point_dict[final_vertex] = [] if not prev_vertex in point_to_segment_dict: point_to_segment_dict[prev_vertex] = [] if not final_vertex in point_to_segment_dict: point_to_segment_dict[final_vertex] = [] for vertex in intersect: if not vertex in voronoi_point_dict: voronoi_point_dict[vertex] = [] if not prev_vertex in voronoi_point_dict: voronoi_point_dict[prev_vertex] = [] s = Segment(prev_vertex, vertex) voronoi_point_dict[vertex].append(prev_vertex) voronoi_point_dict[prev_vertex].append(vertex) if not vertex in point_to_segment_dict: point_to_segment_dict[vertex] = [] if not prev_vertex in point_to_segment_dict: point_to_segment_dict[prev_vertex] = [] point_to_segment_dict[vertex].append(s) point_to_segment_dict[prev_vertex].append(s) prev_vertex = vertex try: polygons, segments_to_polygons = generate_polygons( voronoi_point_dict, segments, points, point_to_segment_dict) except Exception as e: print e print "crashed" while 1: """ helllo""" for seg, gons in segments_to_polygons.iteritems(): for gon in gons: gon.connect_adjacent_nodes(gons) for polygon in polygons: for node in polygon.adjacent_nodes: s = Segment(node.center, polygon.center) draw_segment(s, WHITE) highest_points_of_elevation = [] frontiers = [] for i in range(0, number_of_peaks): p = random.choice(polygons) p.elevation = max_elevation highest_points_of_elevation.append(p) frontiers.append(set(p.adjacent_nodes)) marked_polygons = set([]) elevation = max_elevation while len(marked_polygons) < num_points: elevation -= 1 for i in range(0, number_of_peaks): new_frontier = set([]) while len(frontiers[i]) > 0: node = frontiers[i].pop() node.elevation = elevation draw_point(node.center, ORANGE) for n in node.adjacent_nodes: if n not in marked_polygons: new_frontier.add(n) marked_polygons.add(node) frontiers[i] = new_frontier for polygon in polygons: if polygon.elevation <= 0: vertices = [] for edge in polygon.edge_list: p = (edge.x, edge.y) vertices.append(p) pygame.draw.polygon(screen, BLUE, vertices, 0) pygame.display.flip() pygame.display.flip()
def draw_humans(npimg, humans, imgcopy=False): if imgcopy: npimg = np.copy(npimg) image_h, image_w = npimg.shape[:2] centers = {} # hand_direction = {} for human in humans: # draw point for i in range(CocoPart.Background.value): if i not in human.body_parts.keys(): continue body_part = human.body_parts[i] center = (int(body_part.x * image_w + 0.5), int(body_part.y * image_h + 0.5)) centers[i] = center cv2.circle(npimg, center, 3, CocoColors[i], thickness=3, lineType=8, shift=0) # draw line for pair_order, pair in enumerate(CocoPairsRender): if pair[0] not in human.body_parts.keys( ) or pair[1] not in human.body_parts.keys(): continue # npimg = cv2.line(npimg, centers[pair[0]], centers[pair[1]], common.CocoColors[pair_order], 3) cv2.line(npimg, centers[pair[0]], centers[pair[1]], CocoColors[pair_order], 3) l_line = None r_line = None if 3 in centers and 4 in centers: l_elbow_point = Point(centers[3][0], centers[3][1]) l_wrist_point = Point(centers[4][0], centers[4][1]) l_line = Line(l_elbow_point, l_wrist_point) if 6 in centers and 7 in centers: r_elbow_point = Point(centers[6][0], centers[6][1]) r_wrist_point = Point(centers[7][0], centers[7][1]) r_line = Line(r_elbow_point, r_wrist_point) t_left = Point(0, 0) t_right = Point(image_w, 0) b_left = Point(0, image_h) b_right = Point(image_w, image_h) t_margin = Line(t_left, t_right) l_margin = Line(t_left, b_left) r_margin = Line(t_right, b_right) b_margin = Line(b_left, b_right) if l_line: intersect_point_1 = l_line.intersection(t_margin)[0] x = tuple(l_wrist_point) y = tuple(intersect_point_1) cv2.line(npimg, x, y, (22, 255, 7), 2) print(intersect_point_1) if r_line: intersect_point_r = r_line.intersection(t_margin)[0] x = tuple(r_wrist_point) y = tuple(intersect_point_r) cv2.line(npimg, x, y, (22, 255, 7), 2) print(intersect_point_r) return npimg