Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. import subprocess
  2. import numpy as np
  3. from scipy.spatial import ConvexHull
  4. from io import StringIO
  5. import re
  6. import pygame, time
  7.  
  8. N = 6
  9. WINDOW_SIZE=720
  10. POINT_RANGE=5000
  11.  
  12. pygame.init()
  13.  
  14. low, high = -POINT_RANGE, POINT_RANGE
  15. DISP_H, DISP_W = WINDOW_SIZE, WINDOW_SIZE
  16. disp = pygame.display.set_mode((DISP_W, DISP_H))
  17.  
  18. def transform(pt):
  19. 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)
  20.  
  21. def clear():
  22. disp.fill((0,0,0))
  23.  
  24. def update():
  25. pygame.display.update()
  26.  
  27. def showPoint(p, color):
  28. pygame.draw.circle(disp, color, transform(p), 2, 1)
  29.  
  30. def showCircle(p, r, color):
  31. rr = int(r * DISP_H / (high-low) * 0.75)
  32. pygame.draw.circle(disp, color, transform(p), rr, min(1,rr))
  33.  
  34. def showHull(ch):
  35. print(ch)
  36. print(tuple(map(transform,ch)))
  37. pygame.draw.polygon(disp, (0,100,100), tuple(map(transform,ch)), 4)
  38.  
  39. def run(executable, input):
  40. proc = subprocess.run([executable], input=input,stdout=subprocess.PIPE, encoding='UTF-8')
  41. outp = StringIO(proc.stdout)
  42. return outp.read()
  43.  
  44. def check(n):
  45. br = True
  46. while br:
  47. pygame.display.update()
  48. time.sleep(0.01)
  49. for event in pygame.event.get():
  50. if event.type == pygame.KEYDOWN:
  51. br = False
  52. clear()
  53.  
  54. pts = np.random.randint(low=low, high=high, size=(n, 2))
  55. pts = np.array(list(set(map(tuple,pts.tolist()))))
  56.  
  57. try:
  58. ch = list(ConvexHull(pts).vertices)
  59. showHull(list(map(lambda x : pts[x], ch)))
  60. if len(ch) < 3:
  61. print('retry')
  62. return True
  63. except Exception as e:
  64. print(e)
  65. print('retry')
  66. return True
  67. input = StringIO()
  68. print(len(pts), file=input)
  69. for pt in range(len(pts)):
  70. showPoint(pts[pt], (255,0,0))
  71. print(pts[pt][0], pts[pt][1], file=input)
  72.  
  73. a = run('./mainN', input.getvalue())
  74.  
  75. am = re.match(r"([0-9-.]+)[^0-9-.]+([0-9-.]+)[^0-9-.]+([0-9-.]+)", a)
  76. print(a)
  77. print(am.groups())
  78. ar, ax, ay = float(am.group(1)), float(am.group(2)), float(am.group(3))
  79.  
  80. showCircle((ax,ay), ar, (247, 144, 0))
  81.  
  82. f = open('test', 'w')
  83. f.write(input.getvalue())
  84. f.close()
  85.  
  86. update()
  87.  
  88. i = 0
  89. while True:
  90. check(N)
  91. print(i)
  92. i += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement