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)
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)
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)
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'
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()
def get_i2_to_i3_distance(self): return common.get_distance(self.i2x, self.i2y, self.i3x, self.i3y)
def get_i0_to_i1_distance(self): return common.get_distance(self.i0x, self.i0y, self.i1x, self.i1y)