+def lines(corners):
+ return _lines(corners, 0)
+
+def _lines(corners, n):
+ if n == 0:
+ x = half_line(corners)
+ return (_lines([corners[0], x[0], x[1], corners[3]], n + 1) + [x] +
+ _lines([x[0], corners[1], corners[2], x[1]], n + 1))
+ else:
+ x = half_line(corners)
+ c = intersection(line(x[0], corners[2]), line(corners[1], corners[3]))
+ d = intersection(line(corners[0], corners[3]), line(corners[1], corners[2]))
+ l = (intersection(line(corners[0], corners[1]), line(c,d)),
+ intersection(line(corners[2], corners[3]), line(c,d)))
+ l2 = half_line([corners[0], l[0], l[1], corners[3]])
+ if n == 1:
+ return ([l, l2] + _lines([l[0], l2[0], l2[1], l[1]], 2)
+ + _lines([corners[0], l2[0], l2[1], corners[3]], 2)
+ + _lines([l[0], corners[1], corners[2], l[1]], 2))
+ if n == 2:
+ return [l, l2]
+
+