Boost logo

Geometry :

Subject: Re: [geometry] within(Poly, Poly)
From: Adam Wulkiewicz (adam.wulkiewicz_at_[hidden])
Date: 2013-09-26 17:01:06


Barend Gehrels wrote:
>
>> I tought that this may be used to get different results from
>> get_turns. That it automatically will handle holes with correct
>> 'outside' size and will produce e.g. t+xu instead of t+iu. So I tried
>> to define holes in reverse order but get_turns give the same results.
>
> Are you sure? That should not be the case. If holes are defined in
> reverse order (that means: clockwise for a clockwise polygon), they
> should return different results than holes in correct
> (counter-clockwise) order.... Unless the operation is symmetric (of
> course).

No, you're right. e.g. in the attached files there is difference m+iu vs
m+uu so this works as expected.

>
>>
>> So must I handle each special case, analysing the exterior rings,
>> polygons inside holes, holes inside holes, etc? Or do you see some
>> other, clever way of doing it?
>
> Yes, all turn information should be totally independent on segments
> being exterior or interior (iff the orientation is correct w.r.t. the
> compile-time specified orientation)

Ok so the algorithm complicates, correct me if I'm wrong:

If P1 exterior isn't inside P2 exterior
     return NOT_WITHIN
If P2 has holes
     If P1 exterior is disjoint or only touches holes of P2
         return WITHIN
     If holes of P2 which intersects P1 are also inside P1 holes
         return WITHIN
     else
         return NOT_WITHIN

And holes should be reversed before checking because they have different
orientation than the exterior ring.

Regards,
Adam







Geometry list run by mateusz at loskot.net