lobes function
Splits a closed ring at exactly repeated vertices into lobes, each with its edge labels (spec 07 D5.5). Exact: a stored-value comparison.
Implementation
List<(List<Vector2>, List<int>)> lobes(List<Vector2> v, List<int> e) {
for (var a = 0; a < v.length; a++) {
for (var b = a + 1; b < v.length; b++) {
if (_same(v[a], v[b])) {
return [
...lobes(v.sublist(a, b), e.sublist(a, b)),
...lobes([...v.sublist(b), ...v.sublist(0, a)],
[...e.sublist(b), ...e.sublist(0, a)]),
];
}
}
}
return [(v, e)];
}