fix(integrate): sort boundary edges as pairs

Assisted-by: GLM 5.3 Flash
This commit is contained in:
2026-09-28 09:34:28 +02:00
parent 32e2c1efab
commit a4000c0a82
3 changed files with 49 additions and 3 deletions
+15 -3
View File
@@ -114,13 +114,25 @@ func (m *TriangleMesh2D) BoundaryEdges() []int {
count[key(b, c)]++
count[key(c, a)]++
}
edges := make([]int, 0, 8)
sets := make([][2]int, 0, len(count))
for e, n := range count {
if n == 1 {
edges = append(edges, e[0], e[1])
sets = append(sets, e)
}
}
slices.Sort(edges)
// The pairs sort as pairs, never as one flat index list: a flat sort
// interleaves the endpoints of unrelated edges and hands back pairs
// the mesh does not carry.
slices.SortFunc(sets, func(x, y [2]int) int {
if x[0] != y[0] {
return x[0] - y[0]
}
return x[1] - y[1]
})
edges := make([]int, 0, 2*len(sets))
for _, e := range sets {
edges = append(edges, e[0], e[1])
}
return edges
}