winding-polygon 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/winding-polygon.rb +1 -1
- data/lib/winding-polygon/version.rb +1 -1
- data/spec/winding-polygon_spec.rb +19 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b93c5a04c574168789c5f535cfe5b7bd6b3022b9
|
4
|
+
data.tar.gz: f786a135b79fae01532ff79e204723e8729d4095
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e4b819bec68773342dae6efb09835cc1a1f99ebb28c67b0f26c0b940baeef3867519372ad6f1c8cbf0a08b32ccd7e5f2f6c0adb086acee69cdfd7c061b01bc1
|
7
|
+
data.tar.gz: 052bc7ac5b866fc70a3a44fb4220300ff36eab2b493c8e1e4415b137553489621d4ddc70b9206c681d798b13710532f370349c276176247f1d83794d1118ce31
|
data/lib/winding-polygon.rb
CHANGED
@@ -12,7 +12,7 @@ module WindingPolygon
|
|
12
12
|
def self.decompose(input_polygon)
|
13
13
|
|
14
14
|
intersection_points = input_polygon.get_intersection_points
|
15
|
-
return input_polygon if intersection_points.nil? || intersection_points.size==0
|
15
|
+
return [input_polygon] if intersection_points.nil? || intersection_points.size==0
|
16
16
|
|
17
17
|
input_polygon.simple_segments.sort_by!{|seg| [seg.left_point] }
|
18
18
|
simple_polygons = Array.new
|
@@ -6,8 +6,8 @@ describe WindingPolygon do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
|
9
|
-
it 'should decompose a production complex
|
10
|
-
puts 'should decompose a production complex
|
9
|
+
it 'should decompose a production complex polygon1 into 2 simple polygons' do
|
10
|
+
puts 'should decompose a production complex polygon1 into 2 simple polygons'
|
11
11
|
points = JSON.parse("[["+"-87.78842 41.85362,-87.78739 41.85208,-87.78619 41.85029,-87.78722 41.8352,-87.78894 41.83354,-87.79014 41.83264,-87.79168 41.83175,-87.7934 41.83098,-87.79546 41.83021,-87.79752 41.82957,-87.79992 41.82893,-87.80198 41.82842,-87.80387 41.82804,-87.8061 41.82778,-87.80833 41.82778,-87.81022 41.82778,-87.81245 41.82778,-87.81417 41.82804,-87.81537 41.82855,-87.81657 41.82906,-87.81812 41.83021,-87.81932 41.83175,-87.82052 41.83341,-87.82189 41.83763,-87.82086 41.85605,-87.81949 41.85771,-87.81795 41.85911,-87.81589 41.86078,-87.81365 41.86231,-87.81159 41.86333,-87.80953 41.86423,-87.80713 41.86487,-87.80524 41.86487,-87.80301 41.86487,-87.8013 41.86474,-87.79958 41.86461,-87.79803 41.86436,-87.79666 41.86397,-87.79546 41.86359,-87.79409 41.86321,-87.79288 41.86269,-87.79185 41.86205,-87.79031 41.86103,-87.78928 41.86014,-87.79048 41.85886,-87.79151 41.85796,-87.79288 41.85668,-87.7946 41.85528,-87.79615 41.854,-87.79752 41.85272,-87.79906 41.85131,-87.80078 41.84952,-87.80198 41.84837,-87.80301 41.84748,-87.80473 41.84722,-87.78842 41.85362".gsub(',','],[').gsub(' ',',')+"]]")
|
12
12
|
polygon = WindingPolygon::Polygon.new(points.map{|item| WindingPolygon::Point.new(item[0].to_f,item[1].to_f)})
|
13
13
|
|
@@ -21,8 +21,8 @@ describe WindingPolygon do
|
|
21
21
|
|
22
22
|
end
|
23
23
|
|
24
|
-
it 'should decompose a production complex
|
25
|
-
puts 'should decompose a production complex
|
24
|
+
it 'should decompose a production complex polygon2 into 20 simple polygons' do
|
25
|
+
puts 'should decompose a production complex polygon2 into 20 simple polygons'
|
26
26
|
points = JSON.parse("[["+"34.09522 -82.77396,34.09522 -82.76984,34.0901 -82.76022,34.08555 -82.75542,34.081 -82.74512,34.081 -82.74031,34.08157 -82.72933,34.08442 -82.7204,34.0992 -82.70667,34.11285 -82.70186,34.11 -82.69774,34.10148 -82.68607,34.10091 -82.68126,34.10148 -82.67096,34.10546 -82.66478,34.10887 -82.65997,34.11853 -82.65173,34.15661 -82.66409,34.16002 -82.67165,34.16627 -82.69293,34.17138 -82.70667,34.1782 -82.7204,34.19297 -82.73963,34.19751 -82.73413,34.19751 -82.72246,34.19694 -82.71422,34.19524 -82.69431,34.19297 -82.68263,34.18558 -82.66066,34.18047 -82.65311,34.17024 -82.6483,34.1549 -82.65929,34.15093 -82.66478,34.14183 -82.68057,34.13672 -82.69225,34.12876 -82.71697,34.12933 -82.73757,34.16002 -82.76022,34.1674 -82.75199,34.1674 -82.74718,34.1674 -82.74306,34.16627 -82.73276,34.164 -82.72795,34.15831 -82.71971,34.14695 -82.71353,34.12422 -82.72246,34.12422 -82.72727,34.12422 -82.73345,34.12706 -82.74855,34.13104 -82.75542,34.14127 -82.76572,34.14979 -82.7719,34.15831 -82.77808,34.18899 -82.77121,34.18899 -82.76709,34.18842 -82.7561,34.18729 -82.74993,34.18558 -82.74375,34.17933 -82.7307,34.17479 -82.72452,34.1674 -82.71628,34.15093 -82.70873,34.13445 -82.71491,34.12876 -82.72452,34.12592 -82.7307,34.12365 -82.73757,34.12024 -82.75473,34.11853 -82.76503,34.12024 -82.77327,34.12422 -82.78426,34.12933 -82.78906,34.13786 -82.79456,34.15263 -82.80348,34.16172 -82.8076,34.18217 -82.8028,34.18104 -82.79662,34.17479 -82.79181,34.16968 -82.787,34.16343 -82.78151,34.15718 -82.77533,34.15206 -82.77052,34.1532 -82.7664,34.18274 -82.7719,34.18274 -82.77808,34.17877 -82.78838,34.17365 -82.79318,34.14297 -82.78838,34.1424 -82.78014,34.14354 -82.77396,34.14979 -82.76503,34.15661 -82.75885,34.16627 -82.74924,34.17252 -82.74169,34.17536 -82.73688,34.1782 -82.72589,34.1782 -82.71903,34.17763 -82.71285,34.17649 -82.70667,34.17479 -82.70049,34.16797 -82.69087,34.16286 -82.68675,34.13104 -82.69431,34.13047 -82.6998,34.13047 -82.70529,34.1316 -82.71147,34.13331 -82.71628,34.13729 -82.72109,34.14183 -82.72589,34.14865 -82.73139,34.15547 -82.73551,34.17081 -82.73139,34.17081 -82.72727,34.17081 -82.71765,34.16968 -82.71216,34.16797 -82.70598,34.1657 -82.70186,34.15945 -82.69568,34.14297 -82.70117,34.14183 -82.70598,34.14183 -82.71147,34.14183 -82.71765,34.14297 -82.72177,34.14865 -82.73139,34.15263 -82.73551,34.15775 -82.741,34.1657 -82.74718,34.17252 -82.75199,34.18274 -82.75679,34.19183 -82.76366,34.19126 -82.76778,34.18899 -82.77258,34.1657 -82.76778,34.1657 -82.76366,34.16627 -82.75885,34.16968 -82.75405,34.17365 -82.74993,34.18047 -82.74443,34.18445 -82.73825,34.18672 -82.73413,34.18842 -82.73001,34.18842 -82.72521,34.18842 -82.71971,34.18842 -82.71559,34.18785 -82.71147,34.18615 -82.70667,34.18047 -82.69843,34.17593 -82.69293,34.17024 -82.68744,34.16456 -82.68263,34.14865 -82.67577,34.13501 -82.68057,34.1316 -82.68744,34.12933 -82.69293,34.12592 -82.69843,34.12365 -82.70323,34.12024 -82.71147,34.11683 -82.71971,34.11341 -82.72795,34.11285 -82.73688,34.11285 -82.74443,34.11341 -82.74993,34.11569 -82.75542,34.12365 -82.76366,34.13104 -82.76846,34.14127 -82.77327,34.14695 -82.76915,34.14411 -82.76434,34.13956 -82.76022,34.13445 -82.7561,34.12308 -82.7513,34.10943 -82.74649,34.09806 -82.741,34.0884 -82.73345,34.08555 -82.72795,34.08442 -82.72246,34.08442 -82.71765,34.08669 -82.71147,34.09295 -82.70529,34.10091 -82.70049,34.11171 -82.69568,34.1191 -82.70049,34.11796 -82.70667,34.11796 -82.71285,34.11796 -82.71903,34.11853 -82.72383,34.11967 -82.73001,34.12194 -82.73688,34.12422 -82.74169,34.13104 -82.74787,34.14922 -82.74169,34.15149 -82.73757,34.15206 -82.73276,34.15206 -82.72658,34.15206 -82.7204,34.15206 -82.71422,34.15093 -82.70941,34.14809 -82.70392,34.14013 -82.6998,34.12024 -82.70804,34.11626 -82.71285,34.11398 -82.71903,34.11398 -82.72383,34.11455 -82.73001,34.11512 -82.73482,34.11796 -82.74031,34.12024 -82.74649,34.12365 -82.75267,34.12706 -82.76022,34.13047 -82.76778,34.13388 -82.77602,34.13672 -82.78426,34.13729 -82.79044,34.13729 -82.79593,34.13729 -82.80005,34.13445 -82.80554,34.12024 -82.80005,34.12592 -82.79456,34.13786 -82.78975,34.22193 -82.79387,34.09522 -82.77396".gsub(',','],[').gsub(' ',',')+"]]")
|
27
27
|
polygon = WindingPolygon::Polygon.new(points.map{|item| WindingPolygon::Point.new(item[1].to_f,item[0].to_f)})
|
28
28
|
|
@@ -36,6 +36,21 @@ describe WindingPolygon do
|
|
36
36
|
|
37
37
|
end
|
38
38
|
|
39
|
+
it 'should decompose a production complex polygon3 into 2 simple polygons' do
|
40
|
+
puts 'should decompose a production complex polygon3 into 2 simple polygons'
|
41
|
+
points = JSON.parse("[["+"-117.24925876095165 33.91178188651025,-117.23665 33.92297,-117.23454 33.88265,-117.2329768082223 33.876156994994965,-117.22880432048471 33.858825798560716,-117.21764 33.82916,-117.19441 33.78354,-117.18500627102398 33.76125512143704,-117.17963 33.75808,-117.1822623691137 33.75475264555591,-117.17329 33.73349,-117.1469 33.68342,-117.15323 33.72559,-117.16379 33.7651,-117.17963 33.81249,-117.19969 33.86073,-117.21209151500123 33.88704,-117.21342 33.88704,-117.22240964169768 33.89151566678272,-117.22187 33.8923,-117.24357401835415 33.907738274960245,-117.2451 33.90719,-117.24429633564073 33.90241238017341,-117.25423918087715 33.90736261775205,-117.24925876095165 33.91178188651025".gsub(',','],[').gsub(' ',',')+"]]")
|
42
|
+
polygon = WindingPolygon::Polygon.new(points.map{|item| WindingPolygon::Point.new(item[0].to_f,item[1].to_f)})
|
43
|
+
|
44
|
+
t1 = Time.now
|
45
|
+
multi_polygons = WindingPolygon.decompose(polygon)
|
46
|
+
t2 = Time.now
|
47
|
+
puts "elapsed time: #{(t2-t1)*1000.to_i} ms"
|
48
|
+
multi_polygons.should_not be_nil
|
49
|
+
|
50
|
+
multi_polygons.size.should == 2
|
51
|
+
|
52
|
+
end
|
53
|
+
|
39
54
|
|
40
55
|
|
41
56
|
it 'should decompose Andy complex polygon into 7 simple polygons' do
|