Box2d / Line2d intersection corner cases
hyazinthh opened this issue · 0 comments
hyazinthh commented
Currently, Box2d
and Line2d
performs incorrectly in some corner cases, e.g.
let bb1 = new Box2d(V2d(0.0,1.5), V2d(0.5,2.0))
let bb = new Box2d(V2d(0.0,1.0), V2d(0.5,1.5))
let line = new Line2d(V2d(0.25, 1.0), V2d(0.25, 1.5))
let inter = bb.Intersects(line) // false
let inter1 = bb1.Intersects(line) // true
An equivalent scenario with Box3d
works though
let bb1 = new Box3d(V3d(0.0, 1.5,-1.0), V3d(0.5, 2.0,1.0))
let line = new Line3d(V3d(0.0, 1.5, -1.0), V3d(0.5, 2.0, 1.0))
let inter3d = bb1.Intersects(line)
printfn "%A inter3d" inter3d //true
let bb12 = new Box2d(V2d(0.0, 1.5), V2d(0.5, 2.0))
let line2 = new Line2d(V2d(0.0, 1.5), V2d(0.5, 2.0))
let inter2d = bb12.Intersects(line2)
printfn "%A inter2d" inter2d //false
@krauthaufen proposes following fix
if (out0 == Box.Flags.None) return true;
if (out1 == Box.Flags.None) return true;