예제 #1
0
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)
예제 #2
0
파일: mirr0r.py 프로젝트: ventilator/peuler
 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]
예제 #3
0
파일: test_line.py 프로젝트: msgoff/sympy
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),
    ]
예제 #4
0
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)]
예제 #5
0
파일: mirr0r.py 프로젝트: ventilator/peuler
 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
예제 #6
0
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)
    ]
예제 #7
0
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
예제 #8
0
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)]
예제 #9
0
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()
예제 #10
0
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()
예제 #11
0
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