aardvark-platform/aardvark.base

Box2d / Line2d intersection corner cases

hyazinthh opened this issue · 0 comments

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

68747470733a2f2f66696c65732e6769747465722e696d2f3565323262653536643733343038636534666437303935312f48644f702f7468756d622f696d6167652e706e67

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;