> Van: [email protected] [mailto:programming-
> [email protected]] Namens Bo Jacoby
> Onderwerp: Re: [Jprogramming] Polygon containment
> 
> Well done mr. Boss!
> I supposed you ment to write
>    PTS=: _1 + 2 * pts 3
> such that the area covered is _1<x<1, _1<y<1 rather than 0<x<1, 0<y<1 .
> -Bo
> 


Further improvement is possible if some preprocessing is done.

rou=: [:^ 0j2p1&% * i.
plg=: 3 :'+. rou 10^y' 
pts=: 3 :'0 ?...@$~ 2 ,~ 10^y'

 PLG=: (3 : '(plg y)*1+1%~(10^y)?...@$0') 2             NB. starshaped
polygon
 PTS=: _1 + 2 * pts 4

W2=: 4 : 0
 'X Y'=. x ;&(j./&.|:) y
 t=. (X e.~ Y) -~ Y ((>>./)&:| - [ (<<./)&:| 2( <.&:|/ (* 2 o. -:) 12 o.%/
)\ ]) (,{.) X
 t=. (<.@(0.5&+)@(9&o.) %&0j2p1@(+/)@:^.@(% _1&|.) X -/(0=t)#Y) (I.0=t)} 0>t
)

   ('W';'W2') dspl rnkng scores 'r...@w PLG -/&:(j./"1) PTS';'PLG W2 PTS'
+----+----+-----+----+----+
|verb|rank|et*sz|time|size|
+----+----+-----+----+----+
|W   | 1  |18.36|4.72|3.89|
+----+----+-----+----+----+
|W2  | 0  | 1.00|1.00|1.00|
+----+----+-----+----+----+

   (r...@w PLG -/&:(j./"1) PTS)-:PLG W2 PTS
1


Some remarks
1. if 0 0 is not in the polygon, subtract (+/ % #)PLG from PLG and PTS
2. on the edge (or, with W2, on the vertex) is reckoned to be inside the
polygon
3. since Bron already does preprocessing with in- and circumscribed
rectangles, the improvement in his case(s) will be less.
4. no problems with W2 on vertices:
   PLG W2 PLG
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ....


Some investigation has to be done whether W2 also works for more uncommon
polygons, like with intersections. Perhaps a good definition of in- and
outside should be appropriate then, at least for me.

I'm curious to know if this result can be beaten.


R.E. Boss

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to