polys:=T( //(name,( ((a,b),(c,d)),((a,b),(c,d))... ), ... )==(nm,(ln,ln..) ..) T("squared", T(T(T( 0.0, 0.0), T(10.0, 0.0)), T(T(10.0, 0.0), T(10.0, 10.0)), T(T(10.0, 10.0), T( 0.0, 10.0)), T(T( 0.0, 10.0), T( 0.0, 0.0)))), T("squaredhole", T(T(T( 0.0, 0.0), T(10.0, 0.0)), T(T(10.0, 0.0), T(10.0, 10.0)), T(T(10.0, 10.0), T( 0.0, 10.0)), T(T( 0.0, 10.0), T( 0.0, 0.0)), T(T( 2.5, 2.5), T( 7.5, 2.5)), T(T( 7.5, 2.5), T( 7.5, 7.5)), T(T( 7.5, 7.5), T( 2.5, 7.5)), T(T( 2.5, 7.5), T( 2.5, 2.5)))), T("strange", T(T(T( 0.0, 0.0), T( 2.5, 2.5)), T(T( 2.5, 2.5), T( 0.0, 10.0)), T(T( 0.0, 10.0), T( 2.5, 7.5)), T(T( 2.5, 7.5), T( 7.5, 7.5)), T(T( 7.5, 7.5), T(10.0, 10.0)), T(T(10.0, 10.0), T(10.0, 0.0)), T(T(10.0, 0.0), T( 2.5, 2.5)), T(T( 2.5, 2.5), T( 0.0, 0.0)))), # conjecturally close polygon T("exagon", T(T(T( 3.0, 0.0), T( 7.0, 0.0)), T(T( 7.0, 0.0), T(10.0, 5.0)), T(T(10.0, 5.0), T( 7.0, 10.0)), T(T( 7.0, 10.0), T( 3.0, 10.0)), T(T( 3.0, 10.0), T( 0.0, 5.0)), T(T( 0.0, 5.0), T( 3.0, 0.0)))), ); testPoints:=T( T( 5.0, 5.0), T( 5.0, 8.0), T(-10.0, 5.0), T( 0.0, 5.0), T( 10.0, 5.0), T( 8.0, 5.0), T( 10.0, 10.0) ); foreach name,polywanna in (polys){ name.println(); foreach testPoint in (testPoints){ println("\t(%6.1f,%6.1f)\t".fmt(testPoint.xplode()), pointInPoly(testPoint,polywanna) and "IN" or "OUT"); } }