Esempio n. 1
0
 def get_distance(self, from_icao, to_icao):
     try:
         lat1, lon1 = [radians(x) for x in self.airports[self.airports.icao == from_icao][['lat', 'lon']].iloc[0]]
         lat2, lon2 = [radians(x) for x in self.airports[self.airports.icao == to_icao][['lat', 'lon']].iloc[0]]
     except IndexError:
         return 9999.9
     return common.get_distance(lat1, lon1, lat2, lon2)
Esempio n. 2
0
 def get_distance(self, from_icao, to_icao):
     lat1, lon1 = [
         radians(x) for x in self.airports[self.airports.icao == from_icao]
         [['lat', 'lon']].iloc[0]
     ]
     lat2, lon2 = [
         radians(x) for x in self.airports[self.airports.icao == to_icao]
         [['lat', 'lon']].iloc[0]
     ]
     return common.get_distance(lat1, lon1, lat2, lon2)
Esempio n. 3
0
    def get_distance(self, from_icao, to_icao):
        if len(from_icao) == 3:
            if len(self.airports[self.airports.ident == "K" + from_icao][[
                    'latitude_deg', 'longitude_deg'
            ]]['latitude_deg']) > 0:
                from_icao = "K" + from_icao
            elif len(self.airports[self.airports.ident == "C" + from_icao][[
                    'latitude_deg', 'longitude_deg'
            ]]['latitude_deg']) > 0:
                from_icao = "C" + from_icao

        if len(to_icao) == 3:
            if len(self.airports[self.airports.ident == "K" + to_icao][[
                    'latitude_deg', 'longitude_deg'
            ]]['latitude_deg']) > 0:
                to_icao = "K" + to_icao
            elif len(self.airports[self.airports.ident == "C" + to_icao][[
                    'latitude_deg', 'longitude_deg'
            ]]['latitude_deg']) > 0:
                to_icao = "C" + to_icao

        if len(self.airports[self.airports.ident == from_icao][[
                'latitude_deg', 'longitude_deg'
        ]]['latitude_deg']) == 0 or len(
                self.airports[self.airports.ident == to_icao][[
                    'latitude_deg', 'longitude_deg'
                ]]['latitude_deg']) == 0:
            return 99999

        lat1, lon1 = [
            radians(x) for x in self.airports[self.airports.ident == from_icao]
            [['latitude_deg', 'longitude_deg']].iloc[0]
        ]
        lat2, lon2 = [
            radians(x) for x in self.airports[self.airports.ident == to_icao]
            [['latitude_deg', 'longitude_deg']].iloc[0]
        ]
        return common.get_distance(lat1, lon1, lat2, lon2)
Esempio n. 4
0
    def get_tip(self, frame):
        '''for i in range(7):
            cv2.putText(frame,str(i)+" "+str(self.point_x[i])+" , "+str(self.point_y[i]),(self.point_x[i],self.point_y[i]),cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.8,
                    (255, 255, 255))'''

        #cv2.putText(frame,"0,0",(0,0),cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.8,(255, 255, 255))
        #cv2.putText(frame,"100,100",(100,100),cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.8,(255, 255, 255))
        #cv2.putText(frame,"200,200",(200,200),cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.8,(255, 255, 255))

        distance_index = 0

        for i in range(7):
            for j in range(i + 1, 7):
                self.distaces[distance_index] = common.get_distance(
                    self.point_x[i], self.point_y[i], self.point_x[j],
                    self.point_y[j])
                self.distaces_points[distance_index] = (self.point_x[i],
                                                        self.point_y[i],
                                                        self.point_x[j],
                                                        self.point_y[j])
                distance_index += 1
        max_dis_points1 = self.distaces_points.pop(
            self.distaces.index(max(self.distaces)))
        self.distaces.pop(self.distaces.index(max(self.distaces)))
        max_dis_points2 = self.distaces_points.pop(
            self.distaces.index(max(self.distaces)))

        #print(max_dis_points1)
        #print(max_dis_points2)

        if max_dis_points1[0:2] == max_dis_points2[0:2]:
            self.tip = max_dis_points1[0:2]
            self.base_mid = (
                int((max_dis_points1[2]) + int(max_dis_points2[2])) / 2,
                (max_dis_points1[3] + max_dis_points2[3]) / 2)
            cv2.circle(frame, self.tip, 10, (0, 0, 255), -1)
            cv2.circle(frame, self.base_mid, 10, (0, 255, 0), -1)
            #cv2.circle(frame,max_dis_points2[2:4], 10, (255,0,0), -1)

        if max_dis_points1[0:2] == max_dis_points2[2:4]:
            self.tip = max_dis_points1[0:2]
            self.base_mid = (
                int((max_dis_points1[2]) + int(max_dis_points2[0])) / 2,
                (max_dis_points1[3] + max_dis_points2[1]) / 2)
            cv2.circle(frame, self.tip, 10, (0, 0, 255), -1)
            cv2.circle(frame, self.base_mid, 10, (0, 255, 0), -1)
            #cv2.circle(frame,max_dis_points2[0:2], 10, (255,0,0), -1)

        if max_dis_points1[2:4] == max_dis_points2[0:2]:
            self.tip = max_dis_points1[2:4]
            self.base_mid = (
                int((max_dis_points1[0]) + int(max_dis_points2[2])) / 2,
                (max_dis_points1[1] + max_dis_points2[3]) / 2)
            cv2.circle(frame, self.tip, 10, (0, 0, 255), -1)
            cv2.circle(frame, self.base_mid, 10, (0, 255, 0), -1)
            #cv2.circle(frame,max_dis_points2[2:4], 10, (255,0,0), -1)

        if max_dis_points1[2:4] == max_dis_points2[2:4]:
            self.tip = max_dis_points1[2:4]
            self.base_mid = (
                int((max_dis_points1[0]) + int(max_dis_points2[0])) / 2,
                (max_dis_points1[1] + max_dis_points2[1]) / 2)
            cv2.circle(frame, self.tip, 10, (0, 0, 255), -1)
            cv2.circle(frame, self.base_mid, 10, (0, 255, 0), -1)
def test_get_distance():
    result = common.get_distance((0, 0), (3, 4))
    assert 5 == result, 'get get_distance failed'
Esempio n. 6
0
def draw(surface, colors):
    import numpy
    import scipy.spatial
    import random
    import cairo

    dc = cairo.Context(surface)

    width = surface.get_width()
    height = surface.get_height()
    min_allowed_dist = max(width, height) // random.randint(10, 20)

    w2 = width // 2
    h2 = height // 2
    # add points outside the surface to get a full triangulation of the surface
    points = [(-w2, -h2), (width + w2, -h2), (-w2, height + h2),
              (width + w2, height + h2)]

    # place points randomly with minimum distance
    while True:
        point_placed = False
        for i in range(20):
            x = random.randint(-width // 2, width + width // 2)
            y = random.randint(-height // 2, height + height // 2)

            min_dist = min_allowed_dist if len(points) == 0 else min(
                [get_distance((x, y), p2) for p2 in points])
            if min_dist >= min_allowed_dist:
                points.append((x, y))
                point_placed = True
                break
        if not point_placed:
            break

    lines = set()
    numpy_points = numpy.array(points)
    tri = scipy.spatial.Delaunay(numpy_points)

    # compute triangle colors, trying to find distinct colors for neighboring triangles
    triangle_colors = [None] * len(tri.simplices)
    for index in range(len(tri.simplices)):
        used_colors = {
            triangle_colors[neighbor_index]
            for neighbor_index in tri.neighbors[index]
        }
        triangle_colors[index] = get_unused_color(colors, used_colors)

    # draw triangles
    for index, triangle in enumerate(tri.points[tri.simplices]):
        dc.set_source_rgb(*triangle_colors[index])
        dc.new_path()
        for p in triangle:
            dc.line_to(*p)
        dc.close_path()
        dc.fill()

        # over draw edges to avoid antialiasing artifacts
        for i in range(len(triangle)):
            a = tuple(triangle[i])
            b = tuple(triangle[(i + 1) % len(triangle)])
            if (a, b) not in lines:
                lines.add((a, b))
                lines.add((b, a))
                dc.new_path()
                dc.move_to(*a)
                dc.line_to(*b)
                dc.stroke()
Esempio n. 7
0
 def get_i2_to_i3_distance(self):
     return common.get_distance(self.i2x, self.i2y, self.i3x, self.i3y)
Esempio n. 8
0
 def get_i0_to_i1_distance(self):
     return common.get_distance(self.i0x, self.i0y, self.i1x, self.i1y)