
Geometry : 
Subject: [geometry] numeric bounds?
From: Volker Schöch (vschoech_at_[hidden])
Date: 20120216 10:03:12
Hi again,
Here's a new issue I just came across: I have polygons that have one side extending to "infinity" (examples see below). Taking the symmetric difference of these should result in a (multi)polygon with coordinates in the "normal" range.
As my point base type is int, I tend to use boost::numeric::bounds<int>::highest() when I need some number that is greater than all coordinates that normally occur in my application domain. I understand that some algorithms may not work reliably with coordinates "on the edge" of their domain. As you can see, I accounted for this by using boost::numeric::bounds<int>::highest()/2. This is what I get:
A = MULTIPOLYGON(((1740 1056,2640 1326,3540 1776,3540 1073741823,1740 1073741823)))
area(A) = 2469600
B = MULTIPOLYGON(((1740 1794,2640 2280,3540 2352,3540 1073741823,1740 1073741823)))
area(B) = 3919500
A^B = MULTIPOLYGON()
area(A^B) = 0
If I use a much smaller number, e.g., boost::numeric::bounds<short>::highest(), the results are as expected:
A = MULTIPOLYGON(((1740 1056,2640 1326,3540 1776,3540 32767,1740 32767)))
area(A) = 56512800
B = MULTIPOLYGON(((1740 1794,2640 2280,3540 2352,3540 32767,1740 32767)))
area(B) = 55062900
A^B = MULTIPOLYGON(((1740 1794,1740 1056,2640 1326,3540 1776,3540 2352,2640 2280,1740 1794)))
area(A^B) = 1449900
I am using boost 1.48.0. My polygon type is oriented counterclockwise and not closed.
My question is: Which are the numeric limits for valid input to the difference and intersection algorithms?
Thank you,
Volker
 Volker Schöch  vschoech_at_[hidden] Senior Software Engineer thinkcell Software GmbH  Chausseestr. 8/E  10115 Berlin  Germany http://www.thinkcell.com  phone +49 30 66647310  US phone +1 800 891 8091 Amtsgericht BerlinCharlottenburg, HRB 85229  European Union VAT Id DE813474306 Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl
Geometry list run by mateusz at loskot.net