Files
bspviz/internal/geom/split.go
2025-09-07 15:34:33 +02:00

30 lines
519 B
Go

package geom
func SplitSeg(s Seg, O, D Vec) (front, back []Seg) {
sa := Side(s.A, O, D)
sb := Side(s.B, O, D)
if sa >= -EPS && sb >= -EPS {
return []Seg{s}, nil
}
if sa <= EPS && sb <= EPS {
return nil, []Seg{s}
}
ok, t := SegLineIntersect(s.A, s.B, O, D)
if !ok {
if sa >= 0 {
return []Seg{s}, nil
}
return nil, []Seg{s}
}
M := Vec{s.A.X + t*(s.B.X-s.A.X), s.A.Y + t*(s.B.Y-s.A.Y)}
a := Seg{s.A, M}
b := Seg{M, s.B}
if sa > 0 {
return []Seg{a}, []Seg{b}
}
return []Seg{b}, []Seg{a}
}