Boost logo

Geometry :

Subject: [geometry] difference algorithm produces invalid polygon?
From: Volker Schöch (vschoech_at_[hidden])
Date: 2012-02-14 11:49:48


Hi,

I'm stuck with the following situation. It seems to me that the (asymmetric) difference algorithm produces invalid output from valid input:

 

Step 1:

Input A: (((((1920, 1462), (3720, 1462), (3720, 3262), (1920, 3262)))))

Input B: (((((1918, 1957), (1918, 1657), (2218, 2189), (1918, 1957)))(((3718, 1957), (3360, 2233), (3718, 1561), (3718, 1957)))(((3360, 2233), (2818, 3253), (2218, 2189), (2818, 2653), (3360, 2233)))))

Output: (((((1920, 1660), (1920, 1462), (3720, 1462), (3720, 3262), (1920, 3262), (1920, 1958), (2218, 2189), (1920, 1660)), ((3718, 1957), (3718, 1561), (3360, 2233), (3718, 1957)), ((3360, 2233), (2818, 2653), (2218, 2189), (2818, 3253), (3360, 2233)))))

 

Step 2:

Input A: Output from step 1

Input B: (((((1918, 2155), (1918, 1957), (2818, 2653), (3718, 1957), (3718, 2155), (2818, 3055), (1918, 2155)))))

Output: (((((2218, 2189), (1920, 1660), (1920, 1462), (3720, 1462), (3720, 3262), (1920, 3262), (1920, 2157), (2561, 2798), (2818, 3253), (3042, 2830), (3718, 2155), (3718, 1957), (3718, 1561), (3360, 2233), (3718, 1957), (3359, 2234), (3360, 2233), (2818, 2653), (2218, 2189)), ((2218, 2189), (1920, 1958), (2218, 2189)))))

 

Step 3:

Input A: Output from step 2

Input B: (((((1918, 2455), (1918, 2155), (2218, 2455), (1918, 2455)))(((3718, 2455), (3418, 2455), (3718, 2155), (3718, 2455)))(((2218, 2455), (3418, 2455), (2818, 3055), (2218, 2455)))))

Result: Boost.Geometry Overlay invalid input exception

 

Input B to Step 3 seems to be valid, at least it can be processed without an exception when using Input A from step 1. Thus I conclude that the output from step 2 is invalid. Can you confirm that this is a problem in GGL, possibly related to the fact that I use an integral numeric base type? If not, what's wrong with my input?

 

I am using boost 1.48.0.

 

Regards

   Volker

--
Volker Schöch | vschoech_at_[hidden]
Senior Software Engineer
think-cell Software GmbH | Chausseestr. 8/E | 10115 Berlin | Germany
http://www.think-cell.com | phone +49 30 666473-10 | US phone +1 800 891 8091
Amtsgericht Berlin-Charlottenburg, HRB 85229 | European Union VAT Id DE813474306
Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl


Geometry list run by mateusz at loskot.net