Python – 234
j=1j
r=[1,1+j,j,j-1,-1,-j-1,-j,1-j][n]
m=max(map(len,l))*len(l)*9
M=range(-m,m)
D=[]
for y in M:
d=[]
for x in M:
for i,u in enumerate(l):
for k,v in enumerate(u):
if r*(k-(len(u)-1)/2+1j*i)==x+y*1j:d+=[v]
if d:D+=[d]
print D
Preliminary answer, as I have to do other stuff now. I will likely further golf this down later today. The value of m
is a blatant overestimation.