kopia lustrzana https://github.com/villares/sketch-a-day
40 wiersze
1.1 KiB
Python
40 wiersze
1.1 KiB
Python
def order_segments(unord):
|
|
# first sort the segments
|
|
p0, p1 = unord.pop()
|
|
ord = [(p0, p1)]
|
|
while unord:
|
|
for pair in unord:
|
|
if p0 in pair or p1 in pair:
|
|
ord.append(pair)
|
|
unord.remove(pair)
|
|
p0, p1 = pair[0], pair[1]
|
|
break
|
|
else: # break a possible infinite while
|
|
print("malformed edge sequence")
|
|
break
|
|
## # now fix each segment's internal vertex order
|
|
## unord = ord
|
|
## p0, p1 = unord.pop(0)
|
|
## if p1 != unord[0][0]:
|
|
## p1, p0 = p0, p1
|
|
## ord = [(p0, p1)]
|
|
## for pair in unord:
|
|
## if p1 == pair[0]:
|
|
## p0, p1 = pair[0], pair[1]
|
|
## else:
|
|
## p0, p1 = pair[1], pair[0]
|
|
## ord.append((p0, p1))
|
|
# if you want the vertex points only :)
|
|
p0, p1 = ord.pop(0)
|
|
if p1 != ord[0][0]:
|
|
p1, p0 = p0, p1
|
|
points = [p0]
|
|
for pair in ord:
|
|
if p1 == pair[0]:
|
|
p0, p1 = pair[0], pair[1]
|
|
else:
|
|
p0, p1 = pair[1], pair[0]
|
|
points.append(p0)
|
|
|
|
return points
|