Improvement: the nonzero condition ([:>&1|) can be written (1<|) , read "one is less than the absolute value". - Bo
>________________________________ > Fra: Bo Jacoby <[email protected]> >Til: "[email protected]" <[email protected]> >Sendt: 10:47 torsdag den 30. maj 2013 >Emne: Re: [Jprogramming] Verifying a mouseclick is inside a rectangle > > >Hi Ian >The following solution was issued to the programming forum on may 14, 2012. I >believe it will solve your problem. >- Bo > > >The condition that the zero point is inside the polygon is that the winding >angle is nonzero. > zero_inside_polygon =. [: nonzero winding >The nonzero condition must be tolerant because rounding errors may make a >theoretical zero look like nonzero. But nonzero winding angles are >integer multiples of 0j2p1, so a robust condition is > > nonzero=.[:>&1| >A simple winding angle algorithm is > winding=.[:+/[:^.(%1&|.) > > plot(,{.)p2=.0.1++:p,+:+p=.0j1^i.4NB. p2 =. nonconvex test polygon > zero_inside_polygon p2+3 >1 > zero_inside_polygon >p2 >0 zero_inside_polygon f. NB. final program (25 chars) > >[:([:>&1|)[:+/[:^.(%1&|.) > > > > > > > >>________________________________ >> Fra: Ian Clark <[email protected]> >>Til: Programming forum <[email protected]> >>Sendt: 10:10 torsdag den 30. maj 2013 >>Emne: [Jprogramming] Verifying a mouseclick is inside a rectangle >> >> >>Reinventing The (Square) Wheel Department. >> >>Problem: given a rectangle ABCD defined by four points on the xy-plane, >>detect whether a given point (a mouseclick) falls inside ABCD. Note that >>side AB isn't necessarily parallel to the x or y axes. >> >>Currently I'm using a cumbersome algorithm based on deciding which side of >>a straight line the given point lies. The only thing in its favor is that >>it generalizes to handle an irregular convex polygon. But that's not needed >>here. >> >>It would be nice to transform the rectangle to situate A at the origin, >>then apply a simple range check on x and y. In practice it would only be >>the mouseclick that got transformed (by the inverse matrix). I can't >>believe someone hasn't already got a slick verb to do it. Games programmers >>must do it all the time! >> >>It would be nice too to see a solution using complex numbers instead of >>2-by-2 matrices. I read somewhere that complex numbers were actually >>developed before matrix theory, allegedly to handle coordinate geometry on >>the 2-plane. Can anyone verify or refute this? >> >>Displacement in the xy-plane can't normally be represented by a linear >>transformation, but long ago I read of a way of introducing a third virtual >>z-axis, which did allow both rotation and displacement to be handled in one >>shot by a 3-by-3 matrix. Does anybody know of this technique? >>---------------------------------------------------------------------- >>For information about J forums see http://www.jsoftware.com/forums.htm >> >> >> >---------------------------------------------------------------------- >For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
