Skip to content

Commit 28712e1

Browse files
authored
Polygon Chain Problem
1 parent 99cf7d7 commit 28712e1

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

Polygon Chain/POLCHAIN.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from scipy.optimize import linprog
2+
3+
n=int(input())
4+
polys = [[[int(x) for x in input().split()] for _ in range(int(input()))] for _ in range(n)]
5+
polys.sort(key=lambda p: sum(p1[0]*p2[1] - p1[1]*p2[0] for p1,p2 in zip(p, p[1:] + [p[0]])))
6+
7+
ninc = n*4
8+
a = []
9+
b = []
10+
c = [1]*ninc
11+
for i in range(len(polys)-1):
12+
poly = polys[i+1]
13+
for p in polys[i]:
14+
for i1 in range(len(poly)):
15+
p0, p1 = poly[i1], poly[(i1+1)%len(poly)]
16+
dx, dy = p1[0]-p0[0], p1[1]-p0[1]
17+
eq = [0]*ninc
18+
eq[4*i ] = dy; eq[4*i+1] = -dy
19+
eq[4*i+2] = -dx; eq[4*i+3] = dx
20+
eq[4*i+4] = -dy; eq[4*i+5] = dy
21+
eq[4*i+6] = dx; eq[4*i+7] = -dx
22+
a.append(eq)
23+
b.append(dx*(p[1]-p0[1]) - dy*(p[0]-p0[0]))
24+
25+
res = linprog(c, a, b, method='simplex', options={'maxiter':100000, 'tol':1e-7})
26+
assert res.status == 0 or res.status == 2
27+
print(res.fun if res.status == 0 else -1)

Polygon Chain/Polygon Chain.pdf

202 KB
Binary file not shown.

0 commit comments

Comments
 (0)