47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
|
|
from geometry import x,y
|
|
|
|
def graph_of( segments ):
|
|
graph = {}
|
|
for start,end in segments:
|
|
graph[start] = graph.get( start, [] )
|
|
graph[start].append( end )
|
|
graph[end] = graph.get( end, [] )
|
|
graph[end].append( start )
|
|
return graph
|
|
|
|
|
|
def edges_of( graph ):
|
|
edges = set()
|
|
for k in graph:
|
|
for n in graph[k]:
|
|
if k != n and (k,n) not in edges and (n,k) not in edges:
|
|
edges.add( (k,n) )
|
|
return list(edges)
|
|
|
|
|
|
def nodes_of( graph ):
|
|
return graph.keys()
|
|
|
|
|
|
def load( stream ):
|
|
graph = {}
|
|
for line in stream:
|
|
if line.strip()[0] != "#":
|
|
skey,svals = line.split(":")
|
|
key = tuple((float(i) for i in skey.split(',')))
|
|
graph[key] = []
|
|
for sp in svals.split():
|
|
p = tuple(float(i) for i in sp.split(","))
|
|
assert(len(p)==2)
|
|
graph[key].append( p )
|
|
return graph
|
|
|
|
|
|
def write( graph, stream ):
|
|
for k in graph:
|
|
stream.write( "%f,%f:" % (x(k),y(k)) )
|
|
for p in graph[k]:
|
|
stream.write( "%f,%f " % (x(p),y(p)) )
|
|
stream.write("\n")
|
|
|