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} }