Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import subprocess
- import numpy as np
- from scipy.spatial import ConvexHull
- from io import StringIO
- import re
- import pygame, time
- N = 6
- WINDOW_SIZE=720
- POINT_RANGE=5000
- pygame.init()
- low, high = -POINT_RANGE, POINT_RANGE
- DISP_H, DISP_W = WINDOW_SIZE, WINDOW_SIZE
- disp = pygame.display.set_mode((DISP_W, DISP_H))
- def transform(pt):
- return int((pt[0] - low) / (high - low) * DISP_W * 0.75 + DISP_W * 0.125), int((pt[1] - low) / (high - low) * DISP_H * 0.75 + DISP_H * 0.125)
- def clear():
- disp.fill((0,0,0))
- def update():
- pygame.display.update()
- def showPoint(p, color):
- pygame.draw.circle(disp, color, transform(p), 2, 1)
- def showCircle(p, r, color):
- rr = int(r * DISP_H / (high-low) * 0.75)
- pygame.draw.circle(disp, color, transform(p), rr, min(1,rr))
- def showHull(ch):
- print(ch)
- print(tuple(map(transform,ch)))
- pygame.draw.polygon(disp, (0,100,100), tuple(map(transform,ch)), 4)
- def run(executable, input):
- proc = subprocess.run([executable], input=input,stdout=subprocess.PIPE, encoding='UTF-8')
- outp = StringIO(proc.stdout)
- return outp.read()
- def check(n):
- br = True
- while br:
- pygame.display.update()
- time.sleep(0.01)
- for event in pygame.event.get():
- if event.type == pygame.KEYDOWN:
- br = False
- clear()
- pts = np.random.randint(low=low, high=high, size=(n, 2))
- pts = np.array(list(set(map(tuple,pts.tolist()))))
- try:
- ch = list(ConvexHull(pts).vertices)
- showHull(list(map(lambda x : pts[x], ch)))
- if len(ch) < 3:
- print('retry')
- return True
- except Exception as e:
- print(e)
- print('retry')
- return True
- input = StringIO()
- print(len(pts), file=input)
- for pt in range(len(pts)):
- showPoint(pts[pt], (255,0,0))
- print(pts[pt][0], pts[pt][1], file=input)
- a = run('./mainN', input.getvalue())
- am = re.match(r"([0-9-.]+)[^0-9-.]+([0-9-.]+)[^0-9-.]+([0-9-.]+)", a)
- print(a)
- print(am.groups())
- ar, ax, ay = float(am.group(1)), float(am.group(2)), float(am.group(3))
- showCircle((ax,ay), ar, (247, 144, 0))
- f = open('test', 'w')
- f.write(input.getvalue())
- f.close()
- update()
- i = 0
- while True:
- check(N)
- print(i)
- i += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement