//Called to update N, Tn, Ta, Tb and the the bounding box. func (segment *SegmentShape) update(xf transform.Transform) aabb.AABB { a := xf.TransformVect(segment.A) b := xf.TransformVect(segment.B) segment.Ta = a segment.Tb = b segment.N = vect.Perp(vect.Normalize(vect.Sub(segment.B, segment.A))) segment.Tn = xf.RotateVect(segment.N) rv := vect.Vect{segment.Radius, segment.Radius} min := vect.Min(a, b) min.Sub(rv) max := vect.Max(a, b) max.Add(rv) return aabb.AABB{ min, max, } }
//returns an AABB that holds both a and v. func Expand(a AABB, v vect.Vect) AABB { return AABB{ vect.Min(a.Lower, v), vect.Max(a.Upper, v), } }
//returns an AABB that holds both a and b. func Combine(a, b AABB) AABB { return AABB{ vect.Min(a.Lower, b.Lower), vect.Max(a.Upper, b.Upper), } }