import pygame
import sys, os
from formation_functions import *
pygame.init()
loop_folder = 'loop-data'
screen_size = (600, 400)
color_black = (0,0,0)
color_white = (255,255,255)
robot_size = 6
icon = pygame.image.load("icon_geometry_art.jpg")
pygame.display.set_icon(icon)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("Loop Reader")
world_size = (100.0, 100.0 * screen_size[1]/screen_size[0])
loop_space = 4.0
filename = sys.argv[1]
filepath = os.path.join(os.getcwd(), loop_folder, filename)
if not os.path.isfile(filepath):
print 'file "{}" does not exist'.format(filename)
sys.exit()
nodes = []
nodes.append([0, 0])
nodes.append([loop_space, 0])
f = open(filepath, 'r')
poly_n = int(f.readline())
int_angles = []
newline = f.readline()
while len(newline) != 0:
int_angles.append(float(newline))
newline = f.readline()
if len(int_angles) != poly_n-3:
print 'file "{}" has incorrect number of interior angles'.format(filename)
sys.exit()
for i in range(2, poly_n):
nodes.append([0, 0])
ori_current = 0
for i in range(2, poly_n-1):
int_angle_t = int_angles[i-2]
ori_current = reset_radian(ori_current + (math.pi - int_angle_t))
nodes[i][0] = nodes[i-1][0] + loop_space*math.cos(ori_current)
nodes[i][1] = nodes[i-1][1] + loop_space*math.sin(ori_current)
vect_temp = [nodes[0][0]-nodes[poly_n-2][0],
nodes[0][1]-nodes[poly_n-2][1]]
dist_temp = math.sqrt(vect_temp[0]*vect_temp[0]+
vect_temp[1]*vect_temp[1])
midpoint = [(nodes[poly_n-2][0]+nodes[0][0])/2,
(nodes[poly_n-2][1]+nodes[0][1])/2]
perp_dist = math.sqrt(loop_space*loop_space - dist_temp*dist_temp/4)
perp_ori = math.atan2(vect_temp[1], vect_temp[0]) - math.pi/2
nodes[poly_n-1][0] = midpoint[0] + perp_dist*math.cos(perp_ori)
nodes[poly_n-1][1] = midpoint[1] + perp_dist*math.sin(perp_ori)
geometry_center = [0, 0]
for i in range(poly_n):
geometry_center[0] = geometry_center[0] + nodes[i][0]
geometry_center[1] = geometry_center[1] + nodes[i][1]
geometry_center[0] = geometry_center[0]/poly_n
geometry_center[1] = geometry_center[1]/poly_n
for i in range(poly_n):
nodes[i][0] = nodes[i][0] - geometry_center[0] + world_size[0]/2
nodes[i][1] = nodes[i][1] - geometry_center[1] + world_size[1]/2
screen.fill(color_white)
disp_pos = [[0,0] for i in range(poly_n)]
for i in range(poly_n):
disp_pos[i] = world_to_display(nodes[i], world_size, screen_size)
pygame.draw.circle(screen, color_black, disp_pos[i], robot_size, 0)
for i in range(poly_n-1):
pygame.draw.line(screen, color_black, disp_pos[i], disp_pos[i+1], 2)
pygame.draw.line(screen, color_black, disp_pos[poly_n-1], disp_pos[0], 2)
pygame.display.update()
sim_exit = False
while not sim_exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sim_exit = True
if event.type == pygame.KEYUP:
if (event.key == pygame.K_ESCAPE) or (event.key == pygame.K_q):
sim_exit = True