wo80 / Triangle.NET

C# / .NET version of Jonathan Shewchuk's Triangle mesh generator.
442 stars 81 forks source link

SimpleSmoother crash #18

Closed timoria21 closed 2 years ago

timoria21 commented 2 years ago

Hello, thanks to anybody working on this interesting project.

I have an issue I cannot understand. It could be a very trivial problem because I can't find more information on attributes like markers.

Here is the geometry, the arrow highlights a duplicated point (not sure if I need to clean it or not): image

Here is the crash when I click the Smooth button: face.Edge = null. https://www.screencast.com/t/Yx3xfeGuSdY

I can donate in advance if you know how to help me. Thank you.

The geometry follows:

91 2 0 0 0 60 10 1 59.8012310146161 13.9827138638327 2 59.2068995139417 17.9258457279759 3 58.2229122314456 21.7902069764362 4 56.8590484748163 25.5373918509878 5 55.1288629348091 29.1301591448527 6 53.0495509726398 32.5328023225449 7 50.6417777247591 35.7115043874616 8 47.9294727234429 38.6346739703887 9 44.9395920743493 41.2732592987212 10 41.7018505546304 43.6010369260309 11 38.2484262941265 45.5948723524587 12 34.6136409746558 47.2349499457682 13 30.8336187257202 48.5049698780005 14 26.9459271066772 49.3923101204883 15 22.989203743457 49.8881518872472 16 19.0027723304771 49.9875672800326 17 15.0262518141006 49.6895682640069 18 11.0991626417474 48.9971164872729 19 7.26053398993263 47.9170938466853 20 3.54851587477554 46.4602340924669 21 -7.105427357601E-15 44.6410161513775 22 -3.34974688939159 42.4775202286343 23 -6.46743350387437 39.9912481187094 24 -9.32207487319305 37.2069095108368 25 -11.8853002889169 34.1521764130191 26 -14.1316352652862 30.8574081351799 27 -16.0387547160968 27.3553495647023 28 -17.5877048314363 23.6808057330268 29 -18.7630914491631 19.8702959076118 30 -19.5532330490051 15.961690647047 31 -19.9502768487569 11.9938354264279 32 -19.9502768487569 8.00616457357211 33 -19.5532330490051 4.03830935295302 34 -18.7630914491631 0.129704092388256 35 -17.5877048314363 -3.68080573302675 36 -16.0387547160968 -7.35534956470232 37 -14.1316352652862 -10.8574081351799 38 -11.8853002889169 -14.1521764130191 39 -9.32207487319306 -17.2069095108368 40 -6.46743350387439 -19.9912481187094 41 -3.34974688939162 -22.4775202286342 42 1.4210854715202E-14 -24.6410161513776 43 3.54851587477554 -26.4602340924669 44 7.2605339899326 -27.9170938466853 45 11.0991626417474 -28.9971164872729 46 15.0262518141006 -29.6895682640069 47 19.0027723304771 -29.9875672800326 48 22.989203743457 -29.8881518872472 49 26.9459271066772 -29.3923101204883 50 30.8336187257202 -28.5049698780005 51 34.6136409746558 -27.2349499457682 52 38.2484262941265 -25.5948723524587 53 41.7018505546304 -23.6010369260309 54 44.9395920743493 -21.2732592987212 55 47.9294727234429 -18.6346739703887 56 50.6417777247591 -15.7115043874616 57 53.0495509726398 -12.5328023225449 58 55.1288629348091 -9.13015914485274 59 56.8590484748163 -5.53739185098779 60 58.2229122314456 -1.79020697643619 61 59.2068995139417 2.07415427202409 62 59.8012310146161 6.01728613616731 63 38 30 64 36.9282032302755 34 65 34 36.9282032302755 66 30 38 67 26 36.9282032302755 68 23.0717967697245 34 69 22 30 70 23.0717967697245 26 71 26 23.0717967697245 72 30 22 73 34 23.0717967697245 74 36.9282032302755 26 75 -7.32050807568877 10 76 -8.90001637429337 6.54135926634843 77 -9.79642883761865 2.8462967654657 78 -9.97734678366016 -0.951638316474849 79 -9.43623136647084 -4.71517871018854 80 -8.19263990709037 -8.30830026003773 81 -6.29151904100672 -11.601138191424 82 -3.80158022964224 -14.4746807621014 83 -0.812816349111948 -16.8250706566236 84 2.56675088679344 -18.5673586603214 85 6.21497511279179 -19.6385739452541 86 10 -20 87 60 10 88 55 10 89 52 13 90 52 16 89 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23 24 24 24 25 25 25 26 26 26 27 27 27 28 28 28 29 29 29 30 30 30 31 31 31 32 32 32 33 33 33 34 34 34 35 35 35 36 36 36 37 37 37 38 38 38 39 39 39 40 40 40 41 41 41 42 42 42 43 43 43 44 44 44 45 45 45 46 46 46 47 47 47 48 48 48 49 49 49 50 50 50 51 51 51 52 52 52 53 53 53 54 54 54 55 55 55 56 56 56 57 57 57 58 58 58 59 59 59 60 60 60 61 61 61 62 62 62 0 63 63 64 64 64 65 65 65 66 66 66 67 67 67 68 68 68 69 69 69 70 70 70 71 71 71 72 72 72 73 73 73 74 74 74 63 75 75 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 86 86 87 88 87 88 89 88 89 90 0

wo80 commented 2 years ago

not sure if I need to clean it or not

Yes, removing the duplicate vertex should fix the exception. If I find the time, I might investigate further why the duplicate vertex produces a deficient DCEL.

Now, if you try smoothing, you'll find that it doesn't work as expected (constraint vertices will be moved).

When using SimpleSmoother always make sure: 1) all input vertices have a label > 0 2) all segments have a label > 0 3) you created the mesh with ConstraintOptions { ConformingDelaunay = true }

Here's a poly file that should work:

90 2 0 1
0 60 10      1
1   59.8012310146161 13.9827138638327      1
2   59.2068995139417 17.9258457279759      1
3   58.2229122314456 21.7902069764362      1
4   56.8590484748163 25.5373918509878      1
5   55.1288629348091 29.1301591448527      1
6   53.0495509726398 32.5328023225449      1
7   50.6417777247591 35.7115043874616      1
8   47.9294727234429 38.6346739703887      1
9   44.9395920743493 41.2732592987212      1
10  41.7018505546304 43.6010369260309      1
11  38.2484262941265 45.5948723524587      1
12  34.6136409746558 47.2349499457682      1
13  30.8336187257202 48.5049698780005      1
14  26.9459271066772 49.3923101204883      1
15  22.9892037434570 49.8881518872472      1
16  19.0027723304771 49.9875672800326      1
17  15.0262518141006 49.6895682640069      1
18  11.0991626417474 48.9971164872729      1
19  7.26053398993263 47.9170938466853      1
20  3.54851587477554 46.4602340924669      1
21 -7.105427357601E-15 44.6410161513775    1
22 -3.34974688939159 42.4775202286343      1
23 -6.46743350387437 39.9912481187094      1
24 -9.32207487319305 37.2069095108368      1
25 -11.8853002889169 34.1521764130191      1
26 -14.1316352652862 30.8574081351799      1
27 -16.0387547160968 27.3553495647023      1
28 -17.5877048314363 23.6808057330268      1
29 -18.7630914491631 19.8702959076118      1
30 -19.5532330490051 15.9616906470470      1
31 -19.9502768487569 11.9938354264279      1
32 -19.9502768487569 8.00616457357211      1
33 -19.5532330490051 4.03830935295302      1
34 -18.7630914491631 0.129704092388256     1
35 -17.5877048314363 -3.68080573302675     1
36 -16.0387547160968 -7.35534956470232     1
37 -14.1316352652862 -10.8574081351799     1
38 -11.8853002889169 -14.1521764130191     1
39 -9.32207487319306 -17.2069095108368     1
40 -6.46743350387439 -19.9912481187094     1
41 -3.34974688939162 -22.4775202286342     1
42 1.4210854715202E-14 -24.6410161513776   1
43 3.54851587477554 -26.4602340924669      1
44 7.26053398993260 -27.9170938466853      1
45 11.0991626417474 -28.9971164872729      1
46 15.0262518141006 -29.6895682640069      1
47 19.0027723304771 -29.9875672800326      1
48 22.9892037434570 -29.8881518872472      1
49 26.9459271066772 -29.3923101204883      1
50 30.8336187257202 -28.5049698780005      1
51 34.6136409746558 -27.2349499457682      1
52 38.2484262941265 -25.5948723524587      1
53 41.7018505546304 -23.6010369260309      1
54 44.9395920743493 -21.2732592987212      1
55 47.9294727234429 -18.6346739703887      1
56 50.6417777247591 -15.7115043874616      1
57 53.0495509726398 -12.5328023225449      1
58 55.1288629348091 -9.13015914485274      1
59 56.8590484748163 -5.53739185098779      1
60 58.2229122314456 -1.79020697643619      1
61 59.2068995139417  2.07415427202409      1
62 59.8012310146161  6.01728613616731      1
63 38 30      1
64 36.9282032302755 34      1
65 34 36.9282032302755      1
66 30 38      1
67 26 36.9282032302755      1
68 23.0717967697245 34      1
69 22 30      1
70 23.0717967697245 26      1
71 26 23.0717967697245      1
72 30 22      1
73 34 23.0717967697245      1
74 36.9282032302755 26      1
75 -7.32050807568877 10     1
76 -8.90001637429337   6.54135926634843    1
77 -9.79642883761865   2.8462967654657     1
78 -9.97734678366016  -0.951638316474849   1
79 -9.43623136647084  -4.71517871018854    1
80 -8.19263990709037  -8.30830026003773    1
81 -6.29151904100672  -11.601138191424     1
82 -3.80158022964224  -14.4746807621014    1
83 -0.812816349111948 -16.8250706566236    1
84  2.56675088679344  -18.5673586603214    1
85  6.21497511279179  -19.6385739452541    1
86 10 -20      1
87 55  10      1
88 52  13      1
89 52  16      1
89 1
0 0 1      1
1 1 2      1
2 2 3      1
3 3 4      1
4 4 5      1
5 5 6      1
6 6 7      1
7 7 8      1
8 8 9      1
9 9 10     1
10 10 11   1
11 11 12   1
12 12 13   1
13 13 14   1
14 14 15   1
15 15 16   1
16 16 17   1
17 17 18   1
18 18 19   1
19 19 20   1
20 20 21   1
21 21 22   1
22 22 23   1
23 23 24   1
24 24 25   1
25 25 26   1
26 26 27   1
27 27 28   1
28 28 29   1
29 29 30   1
30 30 31   1
31 31 32   1
32 32 33   1
33 33 34   1
34 34 35   1
35 35 36   1
36 36 37   1
37 37 38   1
38 38 39   1
39 39 40   1
40 40 41   1
41 41 42   1
42 42 43   1
43 43 44   1
44 44 45   1
45 45 46   1
46 46 47   1
47 47 48   1
48 48 49   1
49 49 50   1
50 50 51   1
51 51 52   1
52 52 53   1
53 53 54   1
54 54 55   1
55 55 56   1
56 56 57   1
57 57 58   1
58 58 59   1
59 59 60   1
60 60 61   1
61 61 62   1
62 62 0    1
63 63 64   1
64 64 65   1
65 65 66   1
66 66 67   1
67 67 68   1
68 68 69   1
69 69 70   1
70 70 71   1
71 71 72   1
72 72 73   1
73 73 74   1
74 74 63   1
75 75 76   1
76 76 77   1
77 77 78   1
78 78 79   1
79 79 80   1
80 80 81   1
81 81 82   1
82 82 83   1
83 83 84   1
84 84 85   1
85 85 86   1
86 0 87    1
87 87 88   1
88 88 89   1
0
wo80 commented 2 years ago

The VoronoiBase.Generate() method doesn't check whether the vertex is part of the mesh or not, see BaseVoronoi.cs#L77. So, DCEL faces are created for undead input vertices, which causes the exception.

wo80 commented 2 years ago

Should be fixed in https://github.com/wo80/Triangle.NET/commit/62b7153a8a8bc0622fa88cc5968a8e6a604ad0e4

timoria21 commented 2 years ago

Thanks, are labels the same as markers? Probably I'm using an old version of Triangle.NET...

Originally, I was using a different 'marker' value per open/closed contour. I now see you are using the same one for everything, is there any rule for this?

wo80 commented 2 years ago

I chose a single label for all vertices/segments just for simplicity. The smoother doesn't care for actual label values, it just tests for label == 0 to decide whether a vertex is movable or not, see SimpleSmoother.cs. It's always a good idea to assign different labels for different features of the geometry, so they can easily be identified when post-processing the mesh.

are labels the same as markers?

Yes.

timoria21 commented 2 years ago

I've downloaded the latest version of Triangle.NET, adapted my code (removed obsolete calls) and I can still see one duplicated vertex (you have 90, I have 91) in the open white stroke. Should I care for this? Is the fix you referred to above, designed to skip it automatically?

Thanks.

91 2 0 1
0 60 10 1
1 59.8012310146161 13.9827138638327 1
2 59.2068995139417 17.9258457279759 1
3 58.2229122314456 21.7902069764362 1
4 56.8590484748163 25.5373918509878 1
5 55.1288629348091 29.1301591448527 1
6 53.0495509726398 32.5328023225449 1
7 50.6417777247591 35.7115043874616 1
8 47.9294727234429 38.6346739703887 1
9 44.9395920743493 41.2732592987212 1
10 41.7018505546304 43.6010369260309 1
11 38.2484262941265 45.5948723524587 1
12 34.6136409746558 47.2349499457682 1
13 30.8336187257202 48.5049698780005 1
14 26.9459271066772 49.3923101204883 1
15 22.989203743457 49.8881518872472 1
16 19.0027723304771 49.9875672800326 1
17 15.0262518141006 49.6895682640069 1
18 11.0991626417474 48.9971164872729 1
19 7.26053398993263 47.9170938466853 1
20 3.54851587477554 46.4602340924669 1
21 -7.105427357601E-15 44.6410161513775 1
22 -3.34974688939159 42.4775202286343 1
23 -6.46743350387437 39.9912481187094 1
24 -9.32207487319305 37.2069095108368 1
25 -11.8853002889169 34.1521764130191 1
26 -14.1316352652862 30.8574081351799 1
27 -16.0387547160968 27.3553495647023 1
28 -17.5877048314363 23.6808057330268 1
29 -18.7630914491631 19.8702959076118 1
30 -19.5532330490051 15.961690647047 1
31 -19.9502768487569 11.9938354264279 1
32 -19.9502768487569 8.00616457357211 1
33 -19.5532330490051 4.03830935295302 1
34 -18.7630914491631 0.129704092388256 1
35 -17.5877048314363 -3.68080573302675 1
36 -16.0387547160968 -7.35534956470232 1
37 -14.1316352652862 -10.8574081351799 1
38 -11.8853002889169 -14.1521764130191 1
39 -9.32207487319306 -17.2069095108368 1
40 -6.46743350387439 -19.9912481187094 1
41 -3.34974688939162 -22.4775202286342 1
42 1.4210854715202E-14 -24.6410161513776 1
43 3.54851587477554 -26.4602340924669 1
44 7.2605339899326 -27.9170938466853 1
45 11.0991626417474 -28.9971164872729 1
46 15.0262518141006 -29.6895682640069 1
47 19.0027723304771 -29.9875672800326 1
48 22.989203743457 -29.8881518872472 1
49 26.9459271066772 -29.3923101204883 1
50 30.8336187257202 -28.5049698780005 1
51 34.6136409746558 -27.2349499457682 1
52 38.2484262941265 -25.5948723524587 1
53 41.7018505546304 -23.6010369260309 1
54 44.9395920743493 -21.2732592987212 1
55 47.9294727234429 -18.6346739703887 1
56 50.6417777247591 -15.7115043874616 1
57 53.0495509726398 -12.5328023225449 1
58 55.1288629348091 -9.13015914485274 1
59 56.8590484748163 -5.53739185098779 1
60 58.2229122314456 -1.79020697643619 1
61 59.2068995139417 2.07415427202409 1
62 59.8012310146161 6.01728613616731 1
63 38 30 2
64 36.9282032302755 34 2
65 34 36.9282032302755 2
66 30 38 2
67 26 36.9282032302755 2
68 23.0717967697245 34 2
69 22 30 2
70 23.0717967697245 26 2
71 26 23.0717967697245 2
72 30 22 2
73 34 23.0717967697245 2
74 36.9282032302755 26 2
75 -7.32050807568877 10 3
76 -8.90001637429337 6.54135926634843 3
77 -9.79642883761865 2.8462967654657 3
78 -9.97734678366016 -0.951638316474849 3
79 -9.43623136647084 -4.71517871018854 3
80 -8.19263990709037 -8.30830026003773 3
81 -6.29151904100672 -11.601138191424 3
82 -3.80158022964224 -14.4746807621014 3
83 -0.812816349111948 -16.8250706566236 3
84 2.56675088679344 -18.5673586603214 3
85 6.21497511279179 -19.6385739452541 3
86 10 -20 3
87 60 10 4
88 55 10 4
89 52 13 4
90 52 16 4
89 1
0 0 1 1
1 1 2 1
2 2 3 1
3 3 4 1
4 4 5 1
5 5 6 1
6 6 7 1
7 7 8 1
8 8 9 1
9 9 10 1
10 10 11 1
11 11 12 1
12 12 13 1
13 13 14 1
14 14 15 1
15 15 16 1
16 16 17 1
17 17 18 1
18 18 19 1
19 19 20 1
20 20 21 1
21 21 22 1
22 22 23 1
23 23 24 1
24 24 25 1
25 25 26 1
26 26 27 1
27 27 28 1
28 28 29 1
29 29 30 1
30 30 31 1
31 31 32 1
32 32 33 1
33 33 34 1
34 34 35 1
35 35 36 1
36 36 37 1
37 37 38 1
38 38 39 1
39 39 40 1
40 40 41 1
41 41 42 1
42 42 43 1
43 43 44 1
44 44 45 1
45 45 46 1
46 46 47 1
47 47 48 1
48 48 49 1
49 49 50 1
50 50 51 1
51 51 52 1
52 52 53 1
53 53 54 1
54 54 55 1
55 55 56 1
56 56 57 1
57 57 58 1
58 58 59 1
59 59 60 1
60 60 61 1
61 61 62 1
62 62 0 1
63 63 64 2
64 64 65 2
65 65 66 2
66 66 67 2
67 67 68 2
68 68 69 2
69 69 70 2
70 70 71 2
71 71 72 2
72 72 73 2
73 73 74 2
74 74 63 2
75 75 76 3
76 76 77 3
77 77 78 3
78 78 79 3
79 79 80 3
80 80 81 3
81 81 82 3
82 82 83 3
83 83 84 3
84 84 85 3
85 85 86 3
86 87 88 4
87 88 89 4
88 89 90 4
0
wo80 commented 2 years ago

Well, with the fix I provided, the smoother will work. But be aware that one of your duplicate vertices (number 0 and 87, coordinates (60 10)) will not be part of the mesh, since Triangle sorts out the duplicates. Depending on what you are doing, this might lead to subtle problems when post-processing the mesh.

timoria21 commented 2 years ago

Got it, I will clean it out.

timoria21 commented 2 years ago

Now I think I'm setting up contours pretty well. In this case, by the way, there is still a problem. Am I doing something wrong or it's a library limitation?

Thanks again.

771 2 0 1
0 -43.2599999946153 957.340000005385 1
1 -43.2599999946153 11.3400000053847 1
2 -2.99999999461531 11.3400000053847 1
3 -2.99999999461531 5.38469180355605E-09 1
4 -2.77163859369978 -1.14805029228067 1
5 -2.12132034016012 -2.12132033934407 1
6 -1.14805029334691 -2.77163859325813 1
7 4.23061408127978E-09 -2.99999999461531 1
8 86.4500000053847 -2.99999999461531 1
9 86.4500000053847 11.3400000053847 1
10 91.4500000053847 11.3400000053847 1
11 91.4500000053847 -103.369999994615 1
12 91.6783614063003 -104.518050292281 1
13 92.32867965984 -105.491320339344 1
14 93.3019497066532 -106.141638593258 1
15 94.4500000042307 -106.369999994615 1
16 129.450000005385 -106.369999994615 1
17 130.949999999289 -105.968076209732 1
18 132.048076209732 -104.870000007173 1
19 132.450000005385 -103.370000016154 1
20 132.450000005385 -1.00999999461531 1
21 346.450000005385 -1.00999999461531 1
22 346.450000005385 -103.369999994615 1
23 346.6783614063 -104.518050292281 1
24 347.32867965984 -105.491320339344 1
25 348.301949706653 -106.141638593258 1
26 349.45000000423 -106.369999994615 1
27 379.450000005385 -106.369999994615 1
28 380.59805030257 -106.141638592304 1
29 381.571320349113 -105.491320338344 1
30 382.221638603073 -104.5180502918 1
31 382.450000005385 -103.369999994615 1
32 382.450000005385 -1.00999999461531 1
33 596.450000005385 -1.00999999461531 1
34 596.450000005385 -103.369999994615 1
35 596.6783614063 -104.518050292281 1
36 597.32867965984 -105.491320339344 1
37 598.301949706653 -106.141638593258 1
38 599.450000004231 -106.369999994615 1
39 634.450000005385 -106.369999994615 1
40 635.59805030257 -106.141638592304 1
41 636.571320349113 -105.491320338344 1
42 637.221638603073 -104.5180502918 1
43 637.450000005385 -103.369999994615 1
44 637.450000005385 11.3400000053847 1
45 642.450000005385 11.3400000053847 1
46 642.450000005385 -2.99999999461531 1
47 728.910000005385 -2.99999999461531 1
48 730.05805030257 -2.77163859230352 1
49 731.031320349113 -2.12132033834399 1
50 731.681638603073 -1.14805029180027 1
51 731.910000005385 5.38469180355605E-09 1
52 731.910000005385 11.3400000053847 1
53 772.160000005385 11.3400000053847 1
54 772.160000005385 957.340000005385 1
55 731.910000005385 957.340000005385 1
56 731.910000005385 968.690000005385 1
57 731.508076220135 970.1899999995 1
58 730.410000017154 971.288076209943 1
59 728.910000025769 971.690000005385 1
60 642.450000005385 971.690000005385 1
61 642.450000005385 957.340000005385 1
62 637.450000005385 957.340000005385 1
63 637.450000005385 1072.05000000538 1
64 637.048076220135 1073.5499999995 1
65 635.950000017154 1074.64807620994 1
66 634.450000025769 1075.05000000538 1
67 599.450000005385 1075.05000000538 1
68 598.301949709193 1074.82163860667 1
69 597.328679662647 1074.17132035574 1
70 596.678361408216 1073.19805031153 1
71 596.450000005385 1072.05000001615 1
72 596.450000005385 969.700000005385 1
73 382.450000005385 969.700000005385 1
74 382.450000005385 1072.05000000538 1
75 382.048076220135 1073.5499999995 1
76 380.950000017154 1074.64807620994 1
77 379.450000025769 1075.05000000538 1
78 349.450000005385 1075.05000000538 1
79 348.301949709193 1074.82163860667 1
80 347.328679662647 1074.17132035574 1
81 346.678361408216 1073.19805031153 1
82 346.450000005385 1072.05000001615 1
83 346.450000005385 969.700000005385 1
84 132.450000005385 969.700000005385 1
85 132.450000005385 1072.05000000538 1
86 132.048076220135 1073.5499999995 1
87 130.950000017154 1074.64807620994 1
88 129.450000025769 1075.05000000538 1
89 94.4500000053847 1075.05000000538 1
90 93.3019497091931 1074.82163860667 1
91 92.3286796626472 1074.17132035574 1
92 91.6783614082157 1073.19805031153 1
93 91.4500000053847 1072.05000001615 1
94 91.4500000053847 957.340000005385 1
95 86.4500000053847 957.340000005385 1
96 86.4500000053847 971.690000005385 1
97 5.38469180355605E-09 971.690000005385 1
98 -1.14805029080687 971.461638606675 1
99 -2.12132033735273 970.811320355737 1
100 -2.77163859178433 969.838050311526 1
101 -2.99999999461531 968.690000016154 1
102 -2.99999999461531 957.340000005385 1
103 66.6000000053847 32.8400000053847 2
104 5.60000000538469 32.8400000053847 2
105 5.60000000538469 75.3400000053847 2
106 66.6000000053847 75.3400000053847 2
107 723.310000005385 32.8400000053847 3
108 662.310000005385 32.8400000053847 3
109 662.310000005385 75.3400000053847 3
110 723.310000005385 75.3400000053847 3
111 66.6000000053847 893.340000005385 4
112 5.60000000538469 893.340000005385 4
113 5.60000000538469 935.840000005385 4
114 66.6000000053847 935.840000005385 4
115 723.310000005385 893.340000005385 5
116 662.310000005385 893.340000005385 5
117 662.310000005385 935.840000005385 5
118 723.310000005385 935.840000005385 5
119 -15.9999999946153 32.8400000053847 6
120 -22.2599999946153 32.8400000053847 6
121 -22.2599999946153 75.3400000053847 6
122 -15.9999999946153 75.3400000053847 6
123 751.170000005385 32.8400000053847 7
124 744.910000005385 32.8400000053847 7
125 744.910000005385 75.3400000053847 7
126 751.170000005385 75.3400000053847 7
127 -15.9999999946153 893.340000005385 8
128 -22.2599999946153 893.340000005385 8
129 -22.2599999946153 935.840000005385 8
130 -15.9999999946153 935.840000005385 8
131 751.170000005385 893.340000005385 9
132 744.910000005385 893.340000005385 9
133 744.910000005385 935.840000005385 9
134 751.170000005385 935.840000005385 9
135 44.1000000053847 98.8900000053847 10
136 27.1000000053847 98.8900000053847 10
137 27.1000000053847 104.190000005385 10
138 61.1000000053847 104.190000005385 10
139 61.1000000053847 101.890000005385 10
140 44.1000000053847 101.890000005385 10
141 61.1000000053847 114.490000005385 11
142 27.1000000053847 114.490000005385 11
143 27.1000000053847 119.790000005385 11
144 44.1000000053847 119.790000005385 11
145 44.1000000053847 116.790000005385 11
146 61.1000000053847 116.790000005385 11
147 684.810000005385 101.890000005385 12
148 667.810000005385 101.890000005385 12
149 667.810000005385 104.190000005385 12
150 701.810000005385 104.190000005385 12
151 701.810000005385 98.8900000053847 12
152 684.810000005385 98.8900000053847 12
153 701.810000005385 114.490000005385 13
154 667.810000005385 114.490000005385 13
155 667.810000005385 116.790000005385 13
156 684.810000005385 116.790000005385 13
157 684.810000005385 119.790000005385 13
158 701.810000005385 119.790000005385 13
159 61.1000000053847 864.490000005385 14
160 27.1000000053847 864.490000005385 14
161 27.1000000053847 869.790000005385 14
162 44.1000000053847 869.790000005385 14
163 44.1000000053847 866.790000005385 14
164 61.1000000053847 866.790000005385 14
165 44.1000000053847 848.890000005385 15
166 27.1000000053847 848.890000005385 15
167 27.1000000053847 854.190000005385 15
168 61.1000000053847 854.190000005385 15
169 61.1000000053847 851.890000005385 15
170 44.1000000053847 851.890000005385 15
171 701.810000005385 864.490000005385 16
172 667.810000005385 864.490000005385 16
173 667.810000005385 866.790000005385 16
174 684.810000005385 866.790000005385 16
175 684.810000005385 869.790000005385 16
176 701.810000005385 869.790000005385 16
177 684.810000005385 851.890000005385 17
178 667.810000005385 851.890000005385 17
179 667.810000005385 854.190000005385 17
180 701.810000005385 854.190000005385 17
181 701.810000005385 848.890000005385 17
182 684.810000005385 848.890000005385 17
183 -39.2599999946153 174.340000017051 18
184 -39.2599999946153 194.340000017052 18
185 -38.8245825520535 195.965000013805 18
186 -37.6349999878794 197.154582571573 18
187 -36.0099999887818 197.590000005385 18
188 -34.3849999912473 197.15458256574 18
189 -33.1954174313436 195.965000003701 18
190 -32.7599999946153 194.340000005385 18
191 -32.7599999946153 174.340000005385 18
192 -33.1954174332881 172.715000003701 18
193 -34.3849999979832 171.525417441141 18
194 -36.0100000004487 171.090000005385 18
195 -37.6350000013511 171.525417446974 18
196 -38.8245825617759 172.715000013804 18
197 761.660000005385 174.340000017051 19
198 761.660000005385 194.340000017052 19
199 762.095417447946 195.965000013805 19
200 763.285000012121 197.154582571573 19
201 764.910000011218 197.590000005385 19
202 766.535000008753 197.15458256574 19
203 767.724582568656 195.965000003701 19
204 768.160000005385 194.340000005385 19
205 768.160000005385 174.340000005385 19
206 767.724582566712 172.715000003701 19
207 766.535000002017 171.525417441141 19
208 764.909999999551 171.090000005385 19
209 763.284999998649 171.525417446974 19
210 762.095417438224 172.715000013804 19
211 -39.2599999946153 474.340000017051 20
212 -39.2599999946153 494.340000017051 20
213 -38.8245825520536 495.965000013804 20
214 -37.6349999878795 497.154582571573 20
215 -36.0099999887819 497.590000005385 20
216 -34.3849999912474 497.15458256574 20
217 -33.1954174313436 495.965000003701 20
218 -32.7599999946153 494.340000005385 20
219 -32.7599999946153 474.340000005385 20
220 -33.1954174332881 472.715000003701 20
221 -34.3849999979832 471.525417441141 20
222 -36.0100000004487 471.090000005385 20
223 -37.6350000013511 471.525417446974 20
224 -38.8245825617759 472.715000013804 20
225 761.660000005385 474.340000017051 21
226 761.660000005385 494.340000017051 21
227 762.095417447946 495.965000013804 21
228 763.28500001212 497.154582571573 21
229 764.910000011218 497.590000005385 21
230 766.535000008753 497.15458256574 21
231 767.724582568656 495.965000003701 21
232 768.160000005385 494.340000005385 21
233 768.160000005385 474.340000005385 21
234 767.724582566712 472.715000003701 21
235 766.535000002017 471.525417441141 21
236 764.909999999551 471.090000005385 21
237 763.284999998649 471.525417446974 21
238 762.095417438224 472.715000013804 21
239 -39.2599999946153 774.340000017051 22
240 -39.2599999946153 794.340000017051 22
241 -38.8245825520536 795.965000013804 22
242 -37.6349999878795 797.154582571573 22
243 -36.0099999887819 797.590000005385 22
244 -34.3849999912474 797.15458256574 22
245 -33.1954174313436 795.965000003701 22
246 -32.7599999946153 794.340000005385 22
247 -32.7599999946153 774.340000005385 22
248 -33.1954174332881 772.715000003701 22
249 -34.3849999979832 771.525417441141 22
250 -36.0100000004487 771.090000005385 22
251 -37.6350000013511 771.525417446974 22
252 -38.8245825617759 772.715000013804 22
253 761.660000005385 774.340000017051 23
254 761.660000005385 794.340000017051 23
255 762.095417447946 795.965000013804 23
256 763.28500001212 797.154582571573 23
257 764.910000011218 797.590000005385 23
258 766.535000008753 797.15458256574 23
259 767.724582568656 795.965000003701 23
260 768.160000005385 794.340000005385 23
261 768.160000005385 774.340000005385 23
262 767.724582566712 772.715000003701 23
263 766.535000002017 771.525417441141 23
264 764.909999999551 771.090000005385 23
265 763.284999998649 771.525417446974 23
266 762.095417438224 772.715000013804 23
267 732.560000005385 913.340000005385 24
268 732.124582567684 911.715000005385 24
269 730.935000005385 910.525417443085 24
270 729.310000005385 910.090000005385 24
271 727.685000005385 910.525417443085 24
272 726.495417443085 911.715000005385 24
273 726.060000005385 913.340000005385 24
274 726.495417443085 914.965000005385 24
275 727.685000005385 916.154582567684 24
276 729.310000005385 916.590000005385 24
277 730.935000005385 916.154582567684 24
278 732.124582567684 914.965000005385 24
279 732.560000005385 52.8400000053847 25
280 732.124582567684 51.2150000053847 25
281 730.935000005385 50.0254174430853 25
282 729.310000005385 49.5900000053847 25
283 727.685000005385 50.0254174430853 25
284 726.495417443085 51.2150000053847 25
285 726.060000005385 52.8400000053847 25
286 726.495417443085 54.4650000053847 25
287 727.685000005385 55.6545825676841 25
288 729.310000005385 56.0900000053847 25
289 730.935000005385 55.6545825676841 25
290 732.124582567684 54.4650000053847 25
291 661.060000005385 913.340000005385 26
292 660.624582567684 911.715000005385 26
293 659.435000005385 910.525417443085 26
294 657.810000005385 910.090000005385 26
295 656.185000005385 910.525417443085 26
296 654.995417443085 911.715000005385 26
297 654.560000005385 913.340000005385 26
298 654.995417443085 914.965000005385 26
299 656.185000005385 916.154582567684 26
300 657.810000005385 916.590000005385 26
301 659.435000005385 916.154582567684 26
302 660.624582567684 914.965000005385 26
303 661.060000005385 52.8400000053847 27
304 660.624582567684 51.2150000053847 27
305 659.435000005385 50.0254174430853 27
306 657.810000005385 49.5900000053847 27
307 656.185000005385 50.0254174430853 27
308 654.995417443085 51.2150000053847 27
309 654.560000005385 52.8400000053847 27
310 654.995417443085 54.4650000053847 27
311 656.185000005385 55.6545825676841 27
312 657.810000005385 56.0900000053847 27
313 659.435000005385 55.6545825676841 27
314 660.624582567684 54.4650000053847 27
315 607.700000005385 1010.70000000538 28
316 607.264582567684 1009.07500000538 28
317 606.075000005385 1007.88541744309 28
318 604.450000005385 1007.45000000538 28
319 602.825000005385 1007.88541744309 28
320 601.635417443085 1009.07500000538 28
321 601.200000005385 1010.70000000538 28
322 601.635417443085 1012.32500000538 28
323 602.825000005385 1013.51458256768 28
324 604.450000005385 1013.95000000538 28
325 606.075000005385 1013.51458256768 28
326 607.264582567684 1012.32500000538 28
327 607.700000005385 -42.0099999946153 29
328 607.264582567684 -43.6349999946153 29
329 606.075000005385 -44.8245825569147 29
330 604.450000005385 -45.2599999946153 29
331 602.825000005385 -44.8245825569147 29
332 601.635417443085 -43.6349999946153 29
333 601.200000005385 -42.0099999946153 29
334 601.635417443085 -40.3849999946153 29
335 602.825000005385 -39.1954174323159 29
336 604.450000005385 -38.7599999946153 29
337 606.075000005385 -39.1954174323159 29
338 607.264582567684 -40.3849999946153 29
339 377.700000005385 1010.70000000538 30
340 377.264582567684 1009.07500000538 30
341 376.075000005385 1007.88541744309 30
342 374.450000005385 1007.45000000538 30
343 372.825000005385 1007.88541744309 30
344 371.635417443085 1009.07500000538 30
345 371.200000005385 1010.70000000538 30
346 371.635417443085 1012.32500000538 30
347 372.825000005385 1013.51458256768 30
348 374.450000005385 1013.95000000538 30
349 376.075000005385 1013.51458256768 30
350 377.264582567684 1012.32500000538 30
351 377.700000005385 -42.0099999946153 31
352 377.264582567684 -43.6349999946153 31
353 376.075000005385 -44.8245825569147 31
354 374.450000005385 -45.2599999946153 31
355 372.825000005385 -44.8245825569147 31
356 371.635417443085 -43.6349999946153 31
357 371.200000005385 -42.0099999946153 31
358 371.635417443085 -40.3849999946153 31
359 372.825000005385 -39.1954174323159 31
360 374.450000005385 -38.7599999946153 31
361 376.075000005385 -39.1954174323159 31
362 377.264582567684 -40.3849999946153 31
363 357.700000005385 1010.70000000538 32
364 357.264582567684 1009.07500000538 32
365 356.075000005385 1007.88541744309 32
366 354.450000005385 1007.45000000538 32
367 352.825000005385 1007.88541744309 32
368 351.635417443085 1009.07500000538 32
369 351.200000005385 1010.70000000538 32
370 351.635417443085 1012.32500000538 32
371 352.825000005385 1013.51458256768 32
372 354.450000005385 1013.95000000538 32
373 356.075000005385 1013.51458256768 32
374 357.264582567684 1012.32500000538 32
375 357.700000005385 -42.0099999946153 33
376 357.264582567684 -43.6349999946153 33
377 356.075000005385 -44.8245825569147 33
378 354.450000005385 -45.2599999946153 33
379 352.825000005385 -44.8245825569147 33
380 351.635417443085 -43.6349999946153 33
381 351.200000005385 -42.0099999946153 33
382 351.635417443085 -40.3849999946153 33
383 352.825000005385 -39.1954174323159 33
384 354.450000005385 -38.7599999946153 33
385 356.075000005385 -39.1954174323159 33
386 357.264582567684 -40.3849999946153 33
387 127.700000005385 1010.70000000538 34
388 127.264582567684 1009.07500000538 34
389 126.075000005385 1007.88541744309 34
390 124.450000005385 1007.45000000538 34
391 122.825000005385 1007.88541744309 34
392 121.635417443085 1009.07500000538 34
393 121.200000005385 1010.70000000538 34
394 121.635417443085 1012.32500000538 34
395 122.825000005385 1013.51458256768 34
396 124.450000005385 1013.95000000538 34
397 126.075000005385 1013.51458256768 34
398 127.264582567684 1012.32500000538 34
399 127.700000005385 -42.0099999946153 35
400 127.264582567684 -43.6349999946153 35
401 126.075000005385 -44.8245825569147 35
402 124.450000005385 -45.2599999946153 35
403 122.825000005385 -44.8245825569147 35
404 121.635417443085 -43.6349999946153 35
405 121.200000005385 -42.0099999946153 35
406 121.635417443085 -40.3849999946153 35
407 122.825000005385 -39.1954174323159 35
408 124.450000005385 -38.7599999946153 35
409 126.075000005385 -39.1954174323159 35
410 127.264582567684 -40.3849999946153 35
411 74.3500000053847 915.840000005385 36
412 73.9145825676841 914.215000005385 36
413 72.7250000053847 913.025417443085 36
414 71.1000000053847 912.590000005385 36
415 69.4750000053847 913.025417443085 36
416 68.2854174430853 914.215000005385 36
417 67.8500000053847 915.840000005385 36
418 68.2854174430853 917.465000005385 36
419 69.4750000053847 918.654582567684 36
420 71.1000000053847 919.090000005385 36
421 72.7250000053847 918.654582567684 36
422 73.9145825676841 917.465000005385 36
423 74.3500000053847 55.3400000053847 37
424 73.9145825676841 53.7150000053847 37
425 72.7250000053847 52.5254174430853 37
426 71.1000000053847 52.0900000053847 37
427 69.4750000053847 52.5254174430853 37
428 68.2854174430853 53.7150000053847 37
429 67.8500000053847 55.3400000053847 37
430 68.2854174430853 56.9650000053847 37
431 69.4750000053847 58.1545825676841 37
432 71.1000000053847 58.5900000053847 37
433 72.7250000053847 58.1545825676841 37
434 73.9145825676841 56.9650000053847 37
435 2.85000000538469 915.840000005385 38
436 2.41458256768412 914.215000005385 38
437 1.22500000538469 913.025417443085 38
438 -0.399999994615307 912.590000005385 38
439 -2.02499999461531 913.025417443085 38
440 -3.21458255691473 914.215000005385 38
441 -3.64999999461531 915.840000005385 38
442 -3.21458255691473 917.465000005385 38
443 -2.02499999461531 918.654582567684 38
444 -0.399999994615307 919.090000005385 38
445 1.22500000538469 918.654582567684 38
446 2.41458256768411 917.465000005385 38
447 2.85000000538469 55.3400000053847 39
448 2.41458256768412 53.7150000053847 39
449 1.22500000538469 52.5254174430853 39
450 -0.399999994615307 52.0900000053847 39
451 -2.02499999461531 52.5254174430853 39
452 -3.21458255691473 53.7150000053847 39
453 -3.64999999461531 55.3400000053847 39
454 -3.21458255691473 56.9650000053847 39
455 -2.02499999461531 58.1545825676841 39
456 -0.399999994615307 58.5900000053847 39
457 1.22500000538469 58.1545825676841 39
458 2.41458256768411 56.9650000053847 39
459 767.660000005385 949.340000005385 40
460 767.291569865792 947.965000005385 40
461 766.285000005385 946.958430144978 40
462 764.910000005385 946.590000005385 40
463 763.535000005385 946.958430144978 40
464 762.528430144977 947.965000005385 40
465 762.160000005385 949.340000005385 40
466 762.528430144977 950.715000005385 40
467 763.535000005385 951.721569865792 40
468 764.910000005385 952.090000005385 40
469 766.285000005385 951.721569865792 40
470 767.291569865792 950.715000005385 40
471 -33.2599999946153 949.340000005385 41
472 -33.6284301342081 947.965000005385 41
473 -34.6349999946153 946.958430144978 41
474 -36.0099999946153 946.590000005385 41
475 -37.3849999946153 946.958430144978 41
476 -38.3915698550225 947.965000005385 41
477 -38.7599999946153 949.340000005385 41
478 -38.3915698550225 950.715000005385 41
479 -37.3849999946153 951.721569865792 41
480 -36.0099999946153 952.090000005385 41
481 -34.6349999946153 951.721569865792 41
482 -33.6284301342081 950.715000005385 41
483 767.660000005385 19.3400000053847 42
484 767.291569865792 17.9650000053847 42
485 766.285000005385 16.9584301449775 42
486 764.910000005385 16.5900000053847 42
487 763.535000005385 16.9584301449775 42
488 762.528430144977 17.9650000053847 42
489 762.160000005385 19.3400000053847 42
490 762.528430144977 20.7150000053847 42
491 763.535000005385 21.7215698657919 42
492 764.910000005385 22.0900000053847 42
493 766.285000005385 21.7215698657919 42
494 767.291569865792 20.7150000053847 42
495 -33.2599999946153 19.3400000053847 43
496 -33.6284301342081 17.9650000053847 43
497 -34.6349999946153 16.9584301449775 43
498 -36.0099999946153 16.5900000053847 43
499 -37.3849999946153 16.9584301449775 43
500 -38.3915698550225 17.9650000053847 43
501 -38.7599999946153 19.3400000053847 43
502 -38.3915698550225 20.7150000053847 43
503 -37.3849999946153 21.7215698657919 43
504 -36.0099999946153 22.0900000053847 43
505 -34.6349999946153 21.7215698657919 43
506 -33.6284301342081 20.7150000053847 43
507 758.410000005385 937.590000005385 44
508 758.1085571639 936.465000005385 44
509 757.285000005385 935.64144284687 44
510 756.160000005385 935.340000005385 44
511 755.035000005385 935.64144284687 44
512 754.21144284687 936.465000005385 44
513 753.910000005385 937.590000005385 44
514 754.21144284687 938.715000005385 44
515 755.035000005385 939.5385571639 44
516 756.160000005385 939.840000005385 44
517 757.285000005385 939.5385571639 44
518 758.1085571639 938.715000005385 44
519 758.410000005385 891.590000005385 45
520 758.1085571639 890.465000005385 45
521 757.285000005385 889.64144284687 45
522 756.160000005385 889.340000005385 45
523 755.035000005385 889.64144284687 45
524 754.21144284687 890.465000005385 45
525 753.910000005385 891.590000005385 45
526 754.21144284687 892.715000005385 45
527 755.035000005385 893.5385571639 45
528 756.160000005385 893.840000005385 45
529 757.285000005385 893.5385571639 45
530 758.1085571639 892.715000005385 45
531 758.410000005385 77.0900000053847 46
532 758.1085571639 75.9650000053847 46
533 757.285000005385 75.1414428468697 46
534 756.160000005385 74.8400000053847 46
535 755.035000005385 75.1414428468697 46
536 754.21144284687 75.9650000053847 46
537 753.910000005385 77.0900000053847 46
538 754.21144284687 78.2150000053847 46
539 755.035000005385 79.0385571638997 46
540 756.160000005385 79.3400000053847 46
541 757.285000005385 79.0385571638997 46
542 758.1085571639 78.2150000053847 46
543 758.410000005385 31.0900000053847 47
544 758.1085571639 29.9650000053847 47
545 757.285000005385 29.1414428468697 47
546 756.160000005385 28.8400000053847 47
547 755.035000005385 29.1414428468697 47
548 754.21144284687 29.9650000053847 47
549 753.910000005385 31.0900000053847 47
550 754.21144284687 32.2150000053847 47
551 755.035000005385 33.0385571638997 47
552 756.160000005385 33.3400000053847 47
553 757.285000005385 33.0385571638997 47
554 758.1085571639 32.2150000053847 47
555 -25.0099999946153 937.590000005385 48
556 -25.3114428361003 936.465000005385 48
557 -26.1349999946153 935.64144284687 48
558 -27.2599999946153 935.340000005385 48
559 -28.3849999946153 935.64144284687 48
560 -29.2085571531303 936.465000005385 48
561 -29.5099999946153 937.590000005385 48
562 -29.2085571531303 938.715000005385 48
563 -28.3849999946153 939.5385571639 48
564 -27.2599999946153 939.840000005385 48
565 -26.1349999946153 939.5385571639 48
566 -25.3114428361003 938.715000005385 48
567 -25.0099999946153 891.590000005385 49
568 -25.3114428361003 890.465000005385 49
569 -26.1349999946153 889.64144284687 49
570 -27.2599999946153 889.340000005385 49
571 -28.3849999946153 889.64144284687 49
572 -29.2085571531303 890.465000005385 49
573 -29.5099999946153 891.590000005385 49
574 -29.2085571531303 892.715000005385 49
575 -28.3849999946153 893.5385571639 49
576 -27.2599999946153 893.840000005385 49
577 -26.1349999946153 893.5385571639 49
578 -25.3114428361003 892.715000005385 49
579 -25.0099999946153 77.0900000053847 50
580 -25.3114428361003 75.9650000053847 50
581 -26.1349999946153 75.1414428468697 50
582 -27.2599999946153 74.8400000053847 50
583 -28.3849999946153 75.1414428468697 50
584 -29.2085571531303 75.9650000053847 50
585 -29.5099999946153 77.0900000053847 50
586 -29.2085571531303 78.2150000053847 50
587 -28.3849999946153 79.0385571638997 50
588 -27.2599999946153 79.3400000053847 50
589 -26.1349999946153 79.0385571638997 50
590 -25.3114428361003 78.2150000053847 50
591 -25.0099999946153 31.0900000053847 51
592 -25.3114428361003 29.9650000053847 51
593 -26.1349999946153 29.1414428468697 51
594 -27.2599999946153 28.8400000053847 51
595 -28.3849999946153 29.1414428468697 51
596 -29.2085571531303 29.9650000053847 51
597 -29.5099999946153 31.0900000053847 51
598 -29.2085571531303 32.2150000053847 51
599 -28.3849999946153 33.0385571638997 51
600 -27.2599999946153 33.3400000053847 51
601 -26.1349999946153 33.0385571638997 51
602 -25.3114428361003 32.2150000053847 51
603 739.910000005385 891.590000005385 52
604 739.69564065144 890.790000005385 52
605 739.110000005385 890.20435935933 52
606 738.310000005385 889.990000005385 52
607 737.510000005385 890.20435935933 52
608 736.92435935933 890.790000005385 52
609 736.710000005385 891.590000005385 52
610 736.92435935933 892.390000005385 52
611 737.510000005385 892.97564065144 52
612 738.310000005385 893.190000005385 52
613 739.110000005385 892.97564065144 52
614 739.69564065144 892.390000005385 52
615 -7.79999999461531 891.590000005385 53
616 -8.01435934856021 890.790000005385 53
617 -8.59999999461531 890.20435935933 53
618 -9.39999999461531 889.990000005385 53
619 -10.1999999946153 890.20435935933 53
620 -10.7856406406704 890.790000005385 53
621 -10.9999999946153 891.590000005385 53
622 -10.7856406406704 892.390000005385 53
623 -10.1999999946153 892.97564065144 53
624 -9.39999999461531 893.190000005385 53
625 -8.59999999461531 892.97564065144 53
626 -8.01435934856021 892.390000005385 53
627 620.050000005385 -102.119999994615 54
628 619.83564065144 -102.919999994615 54
629 619.250000005385 -103.50564064067 54
630 618.450000005385 -103.719999994615 54
631 617.650000005385 -103.50564064067 54
632 617.06435935933 -102.919999994615 54
633 616.850000005385 -102.119999994615 54
634 617.06435935933 -101.319999994615 54
635 617.650000005385 -100.73435934856 54
636 618.450000005385 -100.519999994615 54
637 619.250000005385 -100.73435934856 54
638 619.83564065144 -101.319999994615 54
639 366.050000005385 -102.119999994615 55
640 365.83564065144 -102.919999994615 55
641 365.250000005385 -103.50564064067 55
642 364.450000005385 -103.719999994615 55
643 363.650000005385 -103.50564064067 55
644 363.06435935933 -102.919999994615 55
645 362.850000005385 -102.119999994615 55
646 363.06435935933 -101.319999994615 55
647 363.650000005385 -100.73435934856 55
648 364.450000005385 -100.519999994615 55
649 365.250000005385 -100.73435934856 55
650 365.83564065144 -101.319999994615 55
651 739.910000005385 77.0900000053847 56
652 739.69564065144 76.2900000053847 56
653 739.110000005385 75.7043593593296 56
654 738.310000005385 75.4900000053847 56
655 737.510000005385 75.7043593593296 56
656 736.92435935933 76.2900000053847 56
657 736.710000005385 77.0900000053847 56
658 736.92435935933 77.8900000053847 56
659 737.510000005385 78.4756406514398 56
660 738.310000005385 78.6900000053847 56
661 739.110000005385 78.4756406514398 56
662 739.69564065144 77.8900000053847 56
663 739.910000005385 31.0900000053847 57
664 739.69564065144 30.2900000053847 57
665 739.110000005385 29.7043593593296 57
666 738.310000005385 29.4900000053847 57
667 737.510000005385 29.7043593593296 57
668 736.92435935933 30.2900000053847 57
669 736.710000005385 31.0900000053847 57
670 736.92435935933 31.8900000053847 57
671 737.510000005385 32.4756406514398 57
672 738.310000005385 32.6900000053847 57
673 739.110000005385 32.4756406514398 57
674 739.69564065144 31.8900000053847 57
675 -7.79999999461531 77.0900000053847 58
676 -8.01435934856021 76.2900000053847 58
677 -8.59999999461531 75.7043593593296 58
678 -9.39999999461531 75.4900000053847 58
679 -10.1999999946153 75.7043593593296 58
680 -10.7856406406704 76.2900000053847 58
681 -10.9999999946153 77.0900000053847 58
682 -10.7856406406704 77.8900000053847 58
683 -10.1999999946153 78.4756406514398 58
684 -9.39999999461531 78.6900000053847 58
685 -8.59999999461531 78.4756406514398 58
686 -8.01435934856021 77.8900000053847 58
687 -7.79999999461531 31.0900000053847 59
688 -8.01435934856021 30.2900000053847 59
689 -8.59999999461531 29.7043593593296 59
690 -9.39999999461531 29.4900000053847 59
691 -10.1999999946153 29.7043593593296 59
692 -10.7856406406704 30.2900000053847 59
693 -10.9999999946153 31.0900000053847 59
694 -10.7856406406704 31.8900000053847 59
695 -10.1999999946153 32.4756406514398 59
696 -9.39999999461531 32.6900000053847 59
697 -8.59999999461531 32.4756406514398 59
698 -8.01435934856021 31.8900000053847 59
699 112.050000005385 -102.119999994615 60
700 111.83564065144 -102.919999994615 60
701 111.250000005385 -103.50564064067 60
702 110.450000005385 -103.719999994615 60
703 109.650000005385 -103.50564064067 60
704 109.06435935933 -102.919999994615 60
705 108.850000005385 -102.119999994615 60
706 109.06435935933 -101.319999994615 60
707 109.650000005385 -100.73435934856 60
708 110.450000005385 -100.519999994615 60
709 111.250000005385 -100.73435934856 60
710 111.83564065144 -101.319999994615 60
711 739.910000005385 937.590000005385 61
712 739.69564065144 936.790000005385 61
713 739.110000005385 936.204359359329 61
714 738.310000005385 935.990000005385 61
715 737.510000005385 936.204359359329 61
716 736.92435935933 936.790000005385 61
717 736.710000005385 937.590000005385 61
718 736.92435935933 938.390000005385 61
719 737.510000005385 938.97564065144 61
720 738.310000005385 939.190000005385 61
721 739.110000005385 938.97564065144 61
722 739.69564065144 938.390000005385 61
723 620.050000005385 1070.80000000538 62
724 619.83564065144 1070.00000000538 62
725 619.250000005385 1069.41435935933 62
726 618.450000005385 1069.20000000538 62
727 617.650000005385 1069.41435935933 62
728 617.06435935933 1070.00000000538 62
729 616.850000005385 1070.80000000538 62
730 617.06435935933 1071.60000000538 62
731 617.650000005385 1072.18564065144 62
732 618.450000005385 1072.40000000538 62
733 619.250000005385 1072.18564065144 62
734 619.83564065144 1071.60000000538 62
735 366.050000005385 1070.80000000538 63
736 365.83564065144 1070.00000000538 63
737 365.250000005385 1069.41435935933 63
738 364.450000005385 1069.20000000538 63
739 363.650000005385 1069.41435935933 63
740 363.06435935933 1070.00000000538 63
741 362.850000005385 1070.80000000538 63
742 363.06435935933 1071.60000000538 63
743 363.650000005385 1072.18564065144 63
744 364.450000005385 1072.40000000538 63
745 365.250000005385 1072.18564065144 63
746 365.83564065144 1071.60000000538 63
747 -7.79999999461531 937.590000005385 64
748 -8.01435934856021 936.790000005385 64
749 -8.59999999461531 936.204359359329 64
750 -9.39999999461531 935.990000005385 64
751 -10.1999999946153 936.204359359329 64
752 -10.7856406406704 936.790000005385 64
753 -10.9999999946153 937.590000005385 64
754 -10.7856406406704 938.390000005385 64
755 -10.1999999946153 938.97564065144 64
756 -9.39999999461531 939.190000005385 64
757 -8.59999999461531 938.97564065144 64
758 -8.01435934856021 938.390000005385 64
759 112.050000005385 1070.80000000538 65
760 111.83564065144 1070.00000000538 65
761 111.250000005385 1069.41435935933 65
762 110.450000005385 1069.20000000538 65
763 109.650000005385 1069.41435935933 65
764 109.06435935933 1070.00000000538 65
765 108.850000005385 1070.80000000538 65
766 109.06435935933 1071.60000000538 65
767 109.650000005385 1072.18564065144 65
768 110.450000005385 1072.40000000538 65
769 111.250000005385 1072.18564065144 65
770 111.83564065144 1071.60000000538 65
771 1
0 0 1 1
1 1 2 1
2 2 3 1
3 3 4 1
4 4 5 1
5 5 6 1
6 6 7 1
7 7 8 1
8 8 9 1
9 9 10 1
10 10 11 1
11 11 12 1
12 12 13 1
13 13 14 1
14 14 15 1
15 15 16 1
16 16 17 1
17 17 18 1
18 18 19 1
19 19 20 1
20 20 21 1
21 21 22 1
22 22 23 1
23 23 24 1
24 24 25 1
25 25 26 1
26 26 27 1
27 27 28 1
28 28 29 1
29 29 30 1
30 30 31 1
31 31 32 1
32 32 33 1
33 33 34 1
34 34 35 1
35 35 36 1
36 36 37 1
37 37 38 1
38 38 39 1
39 39 40 1
40 40 41 1
41 41 42 1
42 42 43 1
43 43 44 1
44 44 45 1
45 45 46 1
46 46 47 1
47 47 48 1
48 48 49 1
49 49 50 1
50 50 51 1
51 51 52 1
52 52 53 1
53 53 54 1
54 54 55 1
55 55 56 1
56 56 57 1
57 57 58 1
58 58 59 1
59 59 60 1
60 60 61 1
61 61 62 1
62 62 63 1
63 63 64 1
64 64 65 1
65 65 66 1
66 66 67 1
67 67 68 1
68 68 69 1
69 69 70 1
70 70 71 1
71 71 72 1
72 72 73 1
73 73 74 1
74 74 75 1
75 75 76 1
76 76 77 1
77 77 78 1
78 78 79 1
79 79 80 1
80 80 81 1
81 81 82 1
82 82 83 1
83 83 84 1
84 84 85 1
85 85 86 1
86 86 87 1
87 87 88 1
88 88 89 1
89 89 90 1
90 90 91 1
91 91 92 1
92 92 93 1
93 93 94 1
94 94 95 1
95 95 96 1
96 96 97 1
97 97 98 1
98 98 99 1
99 99 100 1
100 100 101 1
101 101 102 1
102 102 0 1
103 103 104 2
104 104 105 2
105 105 106 2
106 106 103 2
107 107 108 3
108 108 109 3
109 109 110 3
110 110 107 3
111 111 112 4
112 112 113 4
113 113 114 4
114 114 111 4
115 115 116 5
116 116 117 5
117 117 118 5
118 118 115 5
119 119 120 6
120 120 121 6
121 121 122 6
122 122 119 6
123 123 124 7
124 124 125 7
125 125 126 7
126 126 123 7
127 127 128 8
128 128 129 8
129 129 130 8
130 130 127 8
131 131 132 9
132 132 133 9
133 133 134 9
134 134 131 9
135 135 136 10
136 136 137 10
137 137 138 10
138 138 139 10
139 139 140 10
140 140 135 10
141 141 142 11
142 142 143 11
143 143 144 11
144 144 145 11
145 145 146 11
146 146 141 11
147 147 148 12
148 148 149 12
149 149 150 12
150 150 151 12
151 151 152 12
152 152 147 12
153 153 154 13
154 154 155 13
155 155 156 13
156 156 157 13
157 157 158 13
158 158 153 13
159 159 160 14
160 160 161 14
161 161 162 14
162 162 163 14
163 163 164 14
164 164 159 14
165 165 166 15
166 166 167 15
167 167 168 15
168 168 169 15
169 169 170 15
170 170 165 15
171 171 172 16
172 172 173 16
173 173 174 16
174 174 175 16
175 175 176 16
176 176 171 16
177 177 178 17
178 178 179 17
179 179 180 17
180 180 181 17
181 181 182 17
182 182 177 17
183 183 184 18
184 184 185 18
185 185 186 18
186 186 187 18
187 187 188 18
188 188 189 18
189 189 190 18
190 190 191 18
191 191 192 18
192 192 193 18
193 193 194 18
194 194 195 18
195 195 196 18
196 196 183 18
197 197 198 19
198 198 199 19
199 199 200 19
200 200 201 19
201 201 202 19
202 202 203 19
203 203 204 19
204 204 205 19
205 205 206 19
206 206 207 19
207 207 208 19
208 208 209 19
209 209 210 19
210 210 197 19
211 211 212 20
212 212 213 20
213 213 214 20
214 214 215 20
215 215 216 20
216 216 217 20
217 217 218 20
218 218 219 20
219 219 220 20
220 220 221 20
221 221 222 20
222 222 223 20
223 223 224 20
224 224 211 20
225 225 226 21
226 226 227 21
227 227 228 21
228 228 229 21
229 229 230 21
230 230 231 21
231 231 232 21
232 232 233 21
233 233 234 21
234 234 235 21
235 235 236 21
236 236 237 21
237 237 238 21
238 238 225 21
239 239 240 22
240 240 241 22
241 241 242 22
242 242 243 22
243 243 244 22
244 244 245 22
245 245 246 22
246 246 247 22
247 247 248 22
248 248 249 22
249 249 250 22
250 250 251 22
251 251 252 22
252 252 239 22
253 253 254 23
254 254 255 23
255 255 256 23
256 256 257 23
257 257 258 23
258 258 259 23
259 259 260 23
260 260 261 23
261 261 262 23
262 262 263 23
263 263 264 23
264 264 265 23
265 265 266 23
266 266 253 23
267 267 268 24
268 268 269 24
269 269 270 24
270 270 271 24
271 271 272 24
272 272 273 24
273 273 274 24
274 274 275 24
275 275 276 24
276 276 277 24
277 277 278 24
278 278 267 24
279 279 280 25
280 280 281 25
281 281 282 25
282 282 283 25
283 283 284 25
284 284 285 25
285 285 286 25
286 286 287 25
287 287 288 25
288 288 289 25
289 289 290 25
290 290 279 25
291 291 292 26
292 292 293 26
293 293 294 26
294 294 295 26
295 295 296 26
296 296 297 26
297 297 298 26
298 298 299 26
299 299 300 26
300 300 301 26
301 301 302 26
302 302 291 26
303 303 304 27
304 304 305 27
305 305 306 27
306 306 307 27
307 307 308 27
308 308 309 27
309 309 310 27
310 310 311 27
311 311 312 27
312 312 313 27
313 313 314 27
314 314 303 27
315 315 316 28
316 316 317 28
317 317 318 28
318 318 319 28
319 319 320 28
320 320 321 28
321 321 322 28
322 322 323 28
323 323 324 28
324 324 325 28
325 325 326 28
326 326 315 28
327 327 328 29
328 328 329 29
329 329 330 29
330 330 331 29
331 331 332 29
332 332 333 29
333 333 334 29
334 334 335 29
335 335 336 29
336 336 337 29
337 337 338 29
338 338 327 29
339 339 340 30
340 340 341 30
341 341 342 30
342 342 343 30
343 343 344 30
344 344 345 30
345 345 346 30
346 346 347 30
347 347 348 30
348 348 349 30
349 349 350 30
350 350 339 30
351 351 352 31
352 352 353 31
353 353 354 31
354 354 355 31
355 355 356 31
356 356 357 31
357 357 358 31
358 358 359 31
359 359 360 31
360 360 361 31
361 361 362 31
362 362 351 31
363 363 364 32
364 364 365 32
365 365 366 32
366 366 367 32
367 367 368 32
368 368 369 32
369 369 370 32
370 370 371 32
371 371 372 32
372 372 373 32
373 373 374 32
374 374 363 32
375 375 376 33
376 376 377 33
377 377 378 33
378 378 379 33
379 379 380 33
380 380 381 33
381 381 382 33
382 382 383 33
383 383 384 33
384 384 385 33
385 385 386 33
386 386 375 33
387 387 388 34
388 388 389 34
389 389 390 34
390 390 391 34
391 391 392 34
392 392 393 34
393 393 394 34
394 394 395 34
395 395 396 34
396 396 397 34
397 397 398 34
398 398 387 34
399 399 400 35
400 400 401 35
401 401 402 35
402 402 403 35
403 403 404 35
404 404 405 35
405 405 406 35
406 406 407 35
407 407 408 35
408 408 409 35
409 409 410 35
410 410 399 35
411 411 412 36
412 412 413 36
413 413 414 36
414 414 415 36
415 415 416 36
416 416 417 36
417 417 418 36
418 418 419 36
419 419 420 36
420 420 421 36
421 421 422 36
422 422 411 36
423 423 424 37
424 424 425 37
425 425 426 37
426 426 427 37
427 427 428 37
428 428 429 37
429 429 430 37
430 430 431 37
431 431 432 37
432 432 433 37
433 433 434 37
434 434 423 37
435 435 436 38
436 436 437 38
437 437 438 38
438 438 439 38
439 439 440 38
440 440 441 38
441 441 442 38
442 442 443 38
443 443 444 38
444 444 445 38
445 445 446 38
446 446 435 38
447 447 448 39
448 448 449 39
449 449 450 39
450 450 451 39
451 451 452 39
452 452 453 39
453 453 454 39
454 454 455 39
455 455 456 39
456 456 457 39
457 457 458 39
458 458 447 39
459 459 460 40
460 460 461 40
461 461 462 40
462 462 463 40
463 463 464 40
464 464 465 40
465 465 466 40
466 466 467 40
467 467 468 40
468 468 469 40
469 469 470 40
470 470 459 40
471 471 472 41
472 472 473 41
473 473 474 41
474 474 475 41
475 475 476 41
476 476 477 41
477 477 478 41
478 478 479 41
479 479 480 41
480 480 481 41
481 481 482 41
482 482 471 41
483 483 484 42
484 484 485 42
485 485 486 42
486 486 487 42
487 487 488 42
488 488 489 42
489 489 490 42
490 490 491 42
491 491 492 42
492 492 493 42
493 493 494 42
494 494 483 42
495 495 496 43
496 496 497 43
497 497 498 43
498 498 499 43
499 499 500 43
500 500 501 43
501 501 502 43
502 502 503 43
503 503 504 43
504 504 505 43
505 505 506 43
506 506 495 43
507 507 508 44
508 508 509 44
509 509 510 44
510 510 511 44
511 511 512 44
512 512 513 44
513 513 514 44
514 514 515 44
515 515 516 44
516 516 517 44
517 517 518 44
518 518 507 44
519 519 520 45
520 520 521 45
521 521 522 45
522 522 523 45
523 523 524 45
524 524 525 45
525 525 526 45
526 526 527 45
527 527 528 45
528 528 529 45
529 529 530 45
530 530 519 45
531 531 532 46
532 532 533 46
533 533 534 46
534 534 535 46
535 535 536 46
536 536 537 46
537 537 538 46
538 538 539 46
539 539 540 46
540 540 541 46
541 541 542 46
542 542 531 46
543 543 544 47
544 544 545 47
545 545 546 47
546 546 547 47
547 547 548 47
548 548 549 47
549 549 550 47
550 550 551 47
551 551 552 47
552 552 553 47
553 553 554 47
554 554 543 47
555 555 556 48
556 556 557 48
557 557 558 48
558 558 559 48
559 559 560 48
560 560 561 48
561 561 562 48
562 562 563 48
563 563 564 48
564 564 565 48
565 565 566 48
566 566 555 48
567 567 568 49
568 568 569 49
569 569 570 49
570 570 571 49
571 571 572 49
572 572 573 49
573 573 574 49
574 574 575 49
575 575 576 49
576 576 577 49
577 577 578 49
578 578 567 49
579 579 580 50
580 580 581 50
581 581 582 50
582 582 583 50
583 583 584 50
584 584 585 50
585 585 586 50
586 586 587 50
587 587 588 50
588 588 589 50
589 589 590 50
590 590 579 50
591 591 592 51
592 592 593 51
593 593 594 51
594 594 595 51
595 595 596 51
596 596 597 51
597 597 598 51
598 598 599 51
599 599 600 51
600 600 601 51
601 601 602 51
602 602 591 51
603 603 604 52
604 604 605 52
605 605 606 52
606 606 607 52
607 607 608 52
608 608 609 52
609 609 610 52
610 610 611 52
611 611 612 52
612 612 613 52
613 613 614 52
614 614 603 52
615 615 616 53
616 616 617 53
617 617 618 53
618 618 619 53
619 619 620 53
620 620 621 53
621 621 622 53
622 622 623 53
623 623 624 53
624 624 625 53
625 625 626 53
626 626 615 53
627 627 628 54
628 628 629 54
629 629 630 54
630 630 631 54
631 631 632 54
632 632 633 54
633 633 634 54
634 634 635 54
635 635 636 54
636 636 637 54
637 637 638 54
638 638 627 54
639 639 640 55
640 640 641 55
641 641 642 55
642 642 643 55
643 643 644 55
644 644 645 55
645 645 646 55
646 646 647 55
647 647 648 55
648 648 649 55
649 649 650 55
650 650 639 55
651 651 652 56
652 652 653 56
653 653 654 56
654 654 655 56
655 655 656 56
656 656 657 56
657 657 658 56
658 658 659 56
659 659 660 56
660 660 661 56
661 661 662 56
662 662 651 56
663 663 664 57
664 664 665 57
665 665 666 57
666 666 667 57
667 667 668 57
668 668 669 57
669 669 670 57
670 670 671 57
671 671 672 57
672 672 673 57
673 673 674 57
674 674 663 57
675 675 676 58
676 676 677 58
677 677 678 58
678 678 679 58
679 679 680 58
680 680 681 58
681 681 682 58
682 682 683 58
683 683 684 58
684 684 685 58
685 685 686 58
686 686 675 58
687 687 688 59
688 688 689 59
689 689 690 59
690 690 691 59
691 691 692 59
692 692 693 59
693 693 694 59
694 694 695 59
695 695 696 59
696 696 697 59
697 697 698 59
698 698 687 59
699 699 700 60
700 700 701 60
701 701 702 60
702 702 703 60
703 703 704 60
704 704 705 60
705 705 706 60
706 706 707 60
707 707 708 60
708 708 709 60
709 709 710 60
710 710 699 60
711 711 712 61
712 712 713 61
713 713 714 61
714 714 715 61
715 715 716 61
716 716 717 61
717 717 718 61
718 718 719 61
719 719 720 61
720 720 721 61
721 721 722 61
722 722 711 61
723 723 724 62
724 724 725 62
725 725 726 62
726 726 727 62
727 727 728 62
728 728 729 62
729 729 730 62
730 730 731 62
731 731 732 62
732 732 733 62
733 733 734 62
734 734 723 62
735 735 736 63
736 736 737 63
737 737 738 63
738 738 739 63
739 739 740 63
740 740 741 63
741 741 742 63
742 742 743 63
743 743 744 63
744 744 745 63
745 745 746 63
746 746 735 63
747 747 748 64
748 748 749 64
749 749 750 64
750 750 751 64
751 751 752 64
752 752 753 64
753 753 754 64
754 754 755 64
755 755 756 64
756 756 757 64
757 757 758 64
758 758 747 64
759 759 760 65
760 760 761 65
761 761 762 65
762 762 763 65
763 763 764 65
764 764 765 65
765 765 766 65
766 766 767 65
767 767 768 65
768 768 769 65
769 769 770 65
770 770 759 65
64
0 36.1000000053847 54.0900000053847
1 692.810000005385 54.0900000053847
2 36.1000000053847 914.590000005385
3 692.810000005385 914.590000005385
4 -19.1299999946153 54.0900000053847
5 748.040000005385 54.0900000053847
6 -19.1299999946153 914.590000005385
7 748.040000005385 914.590000005385
8 35.6000000053847 101.540000005385
9 44.1000000053847 117.140000005385
10 676.310000005385 103.040000005385
11 684.810000005385 115.640000005385
12 44.1000000053847 867.140000005385
13 35.6000000053847 851.540000005385
14 684.810000005385 865.640000005385
15 676.310000005385 853.040000005385
16 -36.0099999946153 184.340000008291
17 764.910000005385 184.340000008291
18 -36.0099999946153 484.340000008291
19 764.910000005385 484.340000008291
20 -36.0099999946153 784.340000008291
21 764.910000005385 784.340000008291
22 729.310000005385 913.340000005385
23 729.310000005385 52.8400000053847
24 657.810000005385 913.340000005385
25 657.810000005385 52.8400000053847
26 604.450000005385 1010.70000000538
27 604.450000005385 -42.0099999946153
28 374.450000005385 1010.70000000538
29 374.450000005385 -42.0099999946153
30 354.450000005385 1010.70000000538
31 354.450000005385 -42.0099999946153
32 124.450000005385 1010.70000000538
33 124.450000005385 -42.0099999946153
34 71.1000000053847 915.840000005385
35 71.1000000053847 55.3400000053847
36 -0.399999994615307 915.840000005385
37 -0.399999994615307 55.3400000053847
38 764.910000005385 949.340000005384
39 -36.0099999946153 949.340000005384
40 764.910000005385 19.3400000053847
41 -36.0099999946153 19.3400000053847
42 756.160000005385 937.590000005384
43 756.160000005385 891.590000005385
44 756.160000005385 77.0900000053847
45 756.160000005385 31.0900000053847
46 -27.2599999946153 937.590000005384
47 -27.2599999946153 891.590000005385
48 -27.2599999946153 77.0900000053847
49 -27.2599999946153 31.0900000053847
50 738.310000005385 891.590000005385
51 -9.3999999946153 891.590000005385
52 618.450000005385 -102.119999994615
53 364.450000005385 -102.119999994615
54 738.310000005385 77.0900000053847
55 738.310000005385 31.0900000053847
56 -9.3999999946153 77.0900000053847
57 -9.3999999946153 31.0900000053847
58 110.450000005385 -102.119999994615
59 738.310000005385 937.590000005385
60 618.450000005385 1070.80000000538
61 364.450000005385 1070.80000000538
62 -9.3999999946153 937.590000005385
63 110.450000005385 1070.80000000538
wo80 commented 2 years ago

Two hole coordinates lie exactly on one of the boundary segments of the hole (x coordinate 44.1000000053847). Make sure they are inside the hole, otherwise Triangle might decide to eat up all your triangles.

How were those coordinates generated?

timoria21 commented 2 years ago

From what I can see, they are generated by this library method:

private static Point FindPointInPolygon(List<Vertex> contour, int limit, double eps)

I was able to see this point computation the first time I step into FindPointInPolygon() method:

8 35.6000000053847 101.540000005385
wo80 commented 2 years ago

The problem here is the IsPointInPolygon() method. It comes with a warning

WARNING: If the point is exactly on the edge of the polygon, then the function may return true or false.

which is exactly what's happening here. I'll take a look and see if I can work around this.

timoria21 commented 2 years ago

Yes, the hole point generated by the library is not good.

I've made this attempt, it works but it looks so weird. Can you think of something more elegant?

// Here we do 8 attempts then leave because more accurate approaches are very slow. More in
// general the topic is to generate a 2D point that it is for sure inside a planar non-convex
// polygon.

BoundingRect(inner, out Point2D min, out Point2D max);

bool inside = false;

Point2D randomPt = new Point2D(0, 0);

int attempts = 0;

do
{
      randomPt.X = min.X + rand.NextDouble() * (max.X - min.X);
      randomPt.Y = min.Y + rand.NextDouble() * (max.Y - min.Y);

      inside = Utility.PointInPolygon(randomPt, inner);

} while (!inside && attempts++ < 8);

if (inside)
{
      ig.AddContour(verts, marker, new TriangleNet.Geometry.Point(randomPt.X, randomPt.Y));
}
else // no luck? we use the standard approach
{
      ig.AddContour(verts, marker, true, false);
}

Here is an interesting discussion: https://gis.stackexchange.com/questions/6412/generate-points-that-lie-inside-polygon

wo80 commented 2 years ago

Can you think of something more elegant?

Adding this kind of randomization is far from being elegant and you get no guarantees at all. After all, you're still calling Utility.PointInPolygon(), so the main problem isn't solved.

I've added a method that checks a point candidate for lying on any of the contour segments, see https://github.com/wo80/Triangle.NET/commit/bc955bb7405b3e7e49ff0b7560929ed44be2bc07.

timoria21 commented 2 years ago

Wow, what a sophisticated IsPointOnSegment() method. I will study it carefully to understand how it works. The problem is resolved.

I see you are doing changes on the develop code line, when will this be merged with the master one?

Please add a GitHub "Donate" button for this project, I would be happy to contribute.

wo80 commented 2 years ago

Some more changes in commit https://github.com/wo80/Triangle.NET/commit/2e83d7ee5e66d50a7d8ac7c169c676c9050e4255 which should again improve reliability.

I see you are doing changes on the develop code line, when will this be merged with the master one?

I'm not planning to take up development on Triangle.NET again, so this is more or less a one time effort to fix some known issues and add the stuff that accumulated over the last few years (which isn't much). I will do a pull request, but I'm not sure if @Geri-Borbas is interested to merge this into the master branch.

But you can always ask for help here or over at https://github.com/Geri-Borbas/Triangle.NET/issues

Please add a GitHub "Donate" button for this project, I would be happy to contribute.

Since this project is a derived work, I'm a bit reluctant to add an official "Donate" button, but if you want to support me, here are some options: http://wo80.bplaced.net/donate.html

Geri-Borbas commented 2 years ago

@wo80 I invited you to the https://github.com/Geri-Borbas/Triangle.NET repo as well, feel free to merge updates and whatever you feel appropriate. You should own that repo, perhaps we can transfer the ownership (?) somehow.

I'm not sure if I ever realized that you are the actual Christian Woltering. 🤔😅 Thanks for the great library! 🙌

wo80 commented 2 years ago

@Geri-Borbas This made me laugh out loud: yes, I am THE ACTUAL Christian Woltering 🤣

Thanks for inviting me! As I said, I'm not planning to take up development again, so there's no need to change ownership.

Geri-Borbas commented 2 years ago

@wo80 You can declare it as a kind of dormant/archive repository, but all the stars (nearing 200) belong to you (also, I saw that CodePlex is gone extinct indeed).

Geri-Borbas commented 2 years ago

@wo80 I can't transfer as long as you have the fork active. If you remove the fork, I can transfer you the repo.

wo80 commented 2 years ago

@Geri-Borbas I guess doing the PR, merging and then removing the fork would be the best way to proceed. Do you agree?

Geri-Borbas commented 2 years ago

I think you can safely delete the fork (while preserving your local repo with the changeset).

Once you have the repo transferred, you can simply set the new wo80/Triangle.NET as a new remote to your local repository, and just commit/push the changeset as you like, as the original author. I think the repo history could be preserved this way more nicely. 💎✨

wo80 commented 2 years ago

All right then. I removed the fork.

Geri-Borbas commented 2 years ago

Transfer request sent. 👌

wo80 commented 2 years ago

Ok, fetching the remote branch and re-pushing the commits worked perfectly. So, I guess, I now have custody again 🙄

Geri-Borbas commented 2 years ago

Wow, epic!

May worth updating the readme/description stating that it is an archived repo, and remove the MIT license paragraph. Could even link the License confusion issue (so cool that the issues are preserved as well).

Geri-Borbas commented 2 years ago

Also, you can now merge into master nicely. Referring to this comment: wo80/Triangle.NET#18

And yeah, donate button make sense as well. 👍

wo80 commented 2 years ago

Yes, I will definitely add some info about the licensing issues to the readme.

timoria21 commented 2 years ago

It seems that the changes on this issue, break the case below. I must say that I'm using the master code line with only the changes on this issue applied.

To be able to write this data I needed to roll back the changes. The exception occurs at the end of the Contour.FindPointInPolygon(List<Vertex> contour, int limit, double eps) method.

If you have a tool to check the integrity of the contours please check it.

174 2 0 1
0 10 40 1
1 9 -2 1
2 30 -10 1
3 60 3 1
4 59 40 1
5 40 30 1
6 35 40 1
7 24 30 1
8 24.0129 28.9507 1
9 24 25 1
10 23.1936 29.6458 1
11 15 1 2
12 15 6 2
13 20 6 2
14 20 1 2
15 40 17 3
16 45 12 3
17 40 7 3
18 35 12 3
19 15.84 14.38 4
20 18.3390791067753 14.38 4
21 18.7864602422881 14.8009180175487 4
22 19.2993748016754 15.1389128587496 4
23 19.862637583445 15.3839779451716 4
24 20.4595727910579 15.5288579500789 4
25 21.0725077317832 15.5692635975551 4
26 21.6832960293752 15.5039986495774 4
27 22.2738548604899 15.3349953214969 4
28 22.826700309572 15.0672570774243 4
29 23.3254649926495 14.708710499105 4
30 23.7553826254143 14.269970613811 4
31 24.1037251896046 13.7640266288846 4
32 24.3601797550673 13.2058573769877 4
33 24.5171538014132 12.611987857073 4
34 24.57 12 4
35 24.5171538014132 11.388012142927 4
36 24.3601797550673 10.7941426230123 4
37 24.1037251896046 10.2359733711154 4
38 23.7553826254143 9.73002938618905 4
39 23.3254649926495 9.29128950089501 4
40 22.826700309572 8.9327429225757 4
41 22.2738548604899 8.66500467850311 4
42 21.6832960293752 8.49600135042263 4
43 21.0725077317832 8.43073640244495 4
44 20.4595727910579 8.4711420499211 4
45 19.862637583445 8.61602205482836 4
46 19.2993748016754 8.86108714125044 4
47 18.7864602422881 9.19908198245134 4
48 18.3390791067753 9.62 4
49 15.84 9.62 4
50 15.3756850336016 9.66573103264031 4
51 14.9292134309711 9.80116671262314 4
52 14.5177428454134 10.0211023227199 4
53 14.157085860776 10.317085860776 4
54 13.8611023227199 10.6777428454133 4
55 13.6411667126231 11.0892134309711 4
56 13.5057310326403 11.5356850336016 4
57 13.46 12 4
58 13.5057310326403 12.4643149663984 4
59 13.6411667126231 12.9107865690289 4
60 13.8611023227199 13.3222571545867 4
61 14.157085860776 13.682914139224 4
62 14.5177428454134 13.9788976772801 4
63 14.9292134309711 14.1988332873769 4
64 15.3756850336016 14.3342689673597 4
65 30 8 5
66 29.8086582838175 8.03806023374436 5
67 29.6464466094067 8.14644660940673 5
68 29.5380602337444 8.30865828381746 5
69 29.5 8.5 5
70 29.5 15.5 5
71 29.5380602337444 15.6913417161825 5
72 29.6464466094067 15.8535533905933 5
73 29.8086582838175 15.9619397662556 5
74 30 16 5
75 30.309016994375 15.9510565162952 5
76 30.5877852522925 15.809016994375 5
77 30.809016994375 15.5877852522925 5
78 30.9510565162952 15.309016994375 5
79 31 15 5
80 30.9510565162952 14.6909830056251 5
81 30.809016994375 14.4122147477075 5
82 30.5877852522925 14.1909830056251 5
83 30.309016994375 14.0489434837048 5
84 30 14 5
85 30 12 5
86 30 11 5
87 30 10 5
88 30.309016994375 9.95105651629516 5
89 30.5877852522925 9.80901699437495 5
90 30.809016994375 9.58778525229248 5
91 30.9510565162952 9.30901699437495 5
92 31 9 5
93 30.9510565162952 8.69098300562506 5
94 30.809016994375 8.41221474770753 5
95 30.5877852522925 8.19098300562505 5
96 30.309016994375 8.04894348370485 5
97 50 8 6
98 49.690983005625 8.04894348370485 6
99 49.4122147477075 8.19098300562505 6
100 49.190983005625 8.41221474770753 6
101 49.0489434837048 8.69098300562505 6
102 49 9 6
103 49.0489434837048 9.30901699437495 6
104 49.190983005625 9.58778525229247 6
105 49.4122147477075 9.80901699437495 6
106 49.690983005625 9.95105651629515 6
107 50 10 6
108 49.5549581320874 10.0501441756364 6
109 49.1322325217649 10.1980622641952 6
110 48.7530203962825 10.4363370350639 6
111 48.4363370350639 10.7530203962825 6
112 48.1980622641952 11.1322325217649 6
113 48.0501441756363 11.5549581320874 6
114 48 12 6
115 48.0501441756363 12.4450418679126 6
116 48.1980622641952 12.8677674782351 6
117 48.4363370350639 13.2469796037175 6
118 48.7530203962825 13.5636629649361 6
119 49.1322325217649 13.8019377358048 6
120 49.5549581320874 13.9498558243636 6
121 50 14 6
122 49.690983005625 14.0489434837048 6
123 49.4122147477075 14.1909830056251 6
124 49.190983005625 14.4122147477075 6
125 49.0489434837048 14.6909830056251 6
126 49 15 6
127 49.0489434837048 15.309016994375 6
128 49.190983005625 15.5877852522925 6
129 49.4122147477075 15.809016994375 6
130 49.690983005625 15.9510565162952 6
131 50 16 6
132 50.4450418679126 15.9498558243636 6
133 50.8677674782351 15.8019377358048 6
134 51.2469796037175 15.5636629649361 6
135 51.5636629649361 15.2469796037175 6
136 51.8019377358048 14.8677674782351 6
137 51.9498558243636 14.4450418679126 6
138 52 14 6
139 51.9498558243636 13.5549581320874 6
140 51.8019377358048 13.1322325217649 6
141 51.5636629649361 12.7530203962825 6
142 51.2469796037175 12.4363370350639 6
143 50.8677674782351 12.1980622641952 6
144 50.4450418679126 12.0501441756364 6
145 50 12 6
146 50.4450418679126 11.9498558243636 6
147 50.8677674782351 11.8019377358048 6
148 51.2469796037175 11.5636629649361 6
149 51.5636629649361 11.2469796037175 6
150 51.8019377358048 10.8677674782351 6
151 51.9498558243636 10.4450418679126 6
152 52 10 6
153 51.9498558243636 9.55495813208737 6
154 51.8019377358048 9.13223252176488 6
155 51.5636629649361 8.75302039628253 6
156 51.2469796037175 8.43633703506394 6
157 50.8677674782351 8.19806226419516 6
158 50.4450418679126 8.05014417563635 6
159 56 15 7
160 56 12 7
161 56 10 7
162 52 4 7
163 52 4 7
164 54 15 7
165 54.0489434837048 15.3090169943749 7
166 54.190983005625 15.5877852522925 7
167 54.4122147477075 15.8090169943749 7
168 54.690983005625 15.9510565162952 7
169 55 16 7
170 55.309016994375 15.9510565162952 7
171 55.5877852522925 15.8090169943749 7
172 55.809016994375 15.5877852522925 7
173 55.9510565162952 15.3090169943749 7
174 1
0 0 1 1
1 1 2 1
2 2 3 1
3 3 4 1
4 4 5 1
5 5 6 1
6 6 7 1
7 7 8 1
8 8 9 1
9 9 10 1
10 10 0 1
11 11 12 2
12 12 13 2
13 13 14 2
14 14 11 2
15 15 16 3
16 16 17 3
17 17 18 3
18 18 15 3
19 19 20 4
20 20 21 4
21 21 22 4
22 22 23 4
23 23 24 4
24 24 25 4
25 25 26 4
26 26 27 4
27 27 28 4
28 28 29 4
29 29 30 4
30 30 31 4
31 31 32 4
32 32 33 4
33 33 34 4
34 34 35 4
35 35 36 4
36 36 37 4
37 37 38 4
38 38 39 4
39 39 40 4
40 40 41 4
41 41 42 4
42 42 43 4
43 43 44 4
44 44 45 4
45 45 46 4
46 46 47 4
47 47 48 4
48 48 49 4
49 49 50 4
50 50 51 4
51 51 52 4
52 52 53 4
53 53 54 4
54 54 55 4
55 55 56 4
56 56 57 4
57 57 58 4
58 58 59 4
59 59 60 4
60 60 61 4
61 61 62 4
62 62 63 4
63 63 64 4
64 64 19 4
65 65 66 5
66 66 67 5
67 67 68 5
68 68 69 5
69 69 70 5
70 70 71 5
71 71 72 5
72 72 73 5
73 73 74 5
74 74 75 5
75 75 76 5
76 76 77 5
77 77 78 5
78 78 79 5
79 79 80 5
80 80 81 5
81 81 82 5
82 82 83 5
83 83 84 5
84 84 85 5
85 85 86 5
86 86 87 5
87 87 88 5
88 88 89 5
89 89 90 5
90 90 91 5
91 91 92 5
92 92 93 5
93 93 94 5
94 94 95 5
95 95 96 5
96 96 65 5
97 97 98 6
98 98 99 6
99 99 100 6
100 100 101 6
101 101 102 6
102 102 103 6
103 103 104 6
104 104 105 6
105 105 106 6
106 106 107 6
107 107 108 6
108 108 109 6
109 109 110 6
110 110 111 6
111 111 112 6
112 112 113 6
113 113 114 6
114 114 115 6
115 115 116 6
116 116 117 6
117 117 118 6
118 118 119 6
119 119 120 6
120 120 121 6
121 121 122 6
122 122 123 6
123 123 124 6
124 124 125 6
125 125 126 6
126 126 127 6
127 127 128 6
128 128 129 6
129 129 130 6
130 130 131 6
131 131 132 6
132 132 133 6
133 133 134 6
134 134 135 6
135 135 136 6
136 136 137 6
137 137 138 6
138 138 139 6
139 139 140 6
140 140 141 6
141 141 142 6
142 142 143 6
143 143 144 6
144 144 145 6
145 145 146 6
146 146 147 6
147 147 148 6
148 148 149 6
149 149 150 6
150 150 151 6
151 151 152 6
152 152 153 6
153 153 154 6
154 154 155 6
155 155 156 6
156 156 157 6
157 157 158 6
158 158 97 6
159 159 160 7
160 160 161 7
161 161 162 7
162 162 163 7
163 163 164 7
164 164 165 7
165 165 166 7
166 166 167 7
167 167 168 7
168 168 169 7
169 169 170 7
170 170 171 7
171 171 172 7
172 172 173 7
173 173 159 7
6
0 17.5 3.5
1 40 12
2 19.3649280924065 14.1695409912257
3 29.8232233047034 8.07322330470337
4 49.7061073738538 8.09549150281253
5 53.5 12
wo80 commented 2 years ago

The main problem here is - again - that you have a duplicate input vertex for the hole that fails:

162 52 4 7
163 52 4 7

I will add a check for this to the IsPointOnSegment() method, but I highly recommend to cleanup your input. For example you can use

TriangleNet.Tools.PolygonValidator.IsConsistent(IPolygon poly)

If it returns false, you can take a look at the log (TriangleNet.Log.Instance.Data) for details.

timoria21 commented 2 years ago

Thanks again, I will add a call to IsConsistent() in test mode to avoid these false issues.

wo80 commented 2 years ago

Pushed the fix to dev branch: https://github.com/wo80/Triangle.NET/pull/16/commits/e8ca95960f8d0f77df8f16ef2fa9e2f46ffeccf5

timoria21 commented 2 years ago

Thanks again!

wo80 commented 2 years ago

You're welcome!

I think this issue has become a bit convoluted. I'll automatically close it when merging the develop branch.

Feel free to open another one if there are more issues or questions.