winding-polygon 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d8c4d4bd5532c0f315bfd93c56b2abeb83d71ba
4
- data.tar.gz: 29690ff49b94f6005f0b3b4ab5d43f1467ee7f8a
3
+ metadata.gz: e4e1dcc7540bc157730c91e6f845ae55d397706a
4
+ data.tar.gz: 689f63d73ce0917f4e3ca7dc2e87415560cca055
5
5
  SHA512:
6
- metadata.gz: 3270fcf7ab126fb0aee8044905b9595fad6f17d54f47f4216941ccd365adc65bf838b43a3f2524fece01c3789655511271059628ab08bf4d0d0faddee437f30f
7
- data.tar.gz: a6e3ea0045b182ae9b18d9f799b94a31ead92806b9d86b20e0a33430ab5005a8634795d345a288f5021bf5449638c2dd260acea6ed0ed4fe6bdbe8353ba08dc6
6
+ metadata.gz: be27e7576bc9f6240e1ff171e4f641c7f56af9282e6f54812cddddd93a76af1a7d98d93070cbd8f2fe2fe82746c61cddd5ec779b85cd438d9632bddf2762880e
7
+ data.tar.gz: b3267a598ce0141d23520eb8e79dbed8214af48003ffdb95e113832e183e4bf2de6756495a261203f8fe86fcb57587f72a6b622040bc2534844b9a372417b0c3
@@ -74,7 +74,7 @@ module WindingPolygon
74
74
  if e[:type] == 'right'
75
75
  s = sweep_line.find_segment(@segments[e[:edge]])
76
76
  point = sweep_line.intersect(s.above, s.below)
77
- event_queue.insert(point_hash_with_edge_info(point, s.above, s.below)) if !point.nil? && !event_queue.exist(point)
77
+ event_queue.insert(point_hash_with_edge_info(point, s.above, s.below)) if !point.nil? && !event_queue.exist(point) && !@intersection_points.any?{|p| p==point}
78
78
  sweep_line.remove(s)
79
79
  @simple_segments << s
80
80
  end
@@ -113,7 +113,7 @@ module WindingPolygon
113
113
 
114
114
  def find_intersection_point_between_segments(s1,s2, event_queue, sweep_line)
115
115
  point =sweep_line.intersect(s1, s2)
116
- event_queue.insert(point_hash_with_edge_info(point, s1, s2)) if !point.nil? && !event_queue.exist(point)
116
+ event_queue.insert(point_hash_with_edge_info(point, s1, s2)) if !point.nil? && !event_queue.exist(point) && !@intersection_points.any?{|p| p==point}
117
117
  end
118
118
 
119
119
  def add_to_intersection_point_collection(point)
@@ -1,3 +1,3 @@
1
1
  module WindingPolygon
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -171,11 +171,36 @@ describe WindingPolygon do
171
171
  t2 = Time.now
172
172
  puts "elapsed time: #{(t2-t1)*1000.to_i} ms"
173
173
 
174
-
175
174
  multi_polygons.size.should == 7
176
175
 
176
+ multi_polygons[0].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-119.818359375002 45.45290147989422,-115.86328125000495 34.15328996737699,-102.52676351947564 36.81219275411459,-104.17382812500229 40.17099871188528,-115.07226562500733 41.63237589430056,-109.95811865270818 42.77494310443354,-119.818359375002 45.45290147989422"
177
+ multi_polygons[1].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-110.50195312500117 46.97322061018078,-103.69099150583577 44.1751011402773,-100.33100481371673 44.925766039368476,-110.50195312500117 46.97322061018078"
178
+ multi_polygons[2].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-109.95811865270818 42.77494310443354,-94.15143902809056 38.48198198095287,-91.2441372988624 39.06161099850639,-103.69099150583577 44.1751011402773,-109.95811865270818 42.77494310443354"
179
+ multi_polygons[3].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-102.52676351947564 36.81219275411459,-100.3945312500027 32.46399995947513,-95.82421875000551 37.08201838643584,-88.52929687500257 35.95188058401679,-84.31054687500303 33.64262887366194,-83.16796875000327 34.51617009551454,-82.37695312500296 32.538125275571225,-83.22015254748098 35.513136593728035,-94.15143902809056 38.48198198095287,-102.52676351947564 36.81219275411459"
180
+ multi_polygons[4].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-100.33100481371673 44.925766039368476,-92.66015625000608 43.38159203778072,-94.68164062500398 46.18790776409503,-100.33100481371673 44.925766039368476"
181
+ multi_polygons[5].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-91.2441372988624 39.06161099850639,-83.30099309938232 35.7983615956211,-84.31054687500303 39.36031127050692,-72.79687500000323 42.739443407624286,-91.2441372988624 39.06161099850639"
182
+ multi_polygons[6].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-83.30099309938232 35.7983615956211,-83.22015254748098 35.513136593728035,-81.4101562500034 35.021556836103684,-83.30099309938232 35.7983615956211"
177
183
  end
178
184
 
179
185
 
186
+ it 'should decompose a production complex polygon 8 into four simple polygons' do
187
+ puts 'should decompose a production complex polygon 8 into four simple polygons'
188
+ points = JSON.parse("[["+"-88.69626 32.36626,-88.69697 32.36713,-88.69706 32.36722,-88.69713 32.3673,-88.69719 32.36738,-88.69729 32.36747,-88.69743 32.36758,-88.69749 32.36765,-88.69759 32.36777,-88.69767 32.36791,-88.69769 32.36798,-88.69626 32.36626".gsub(',','],[').gsub(' ',',')+"]]")
189
+ polygon = WindingPolygon::Polygon.new(points.map{|item| WindingPolygon::Point.new(item[0].to_f,item[1].to_f)})
190
+
191
+ t1 = Time.now
192
+ multi_polygons = WindingPolygon.decompose(polygon)
193
+ t2 = Time.now
194
+ puts "elapsed time: #{(t2-t1)*1000.to_i} ms"
195
+ multi_polygons.should_not be_nil
196
+
197
+ multi_polygons.size.should == 4
198
+
199
+ multi_polygons[0].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-88.69769 32.36798,-88.69767 32.36791,-88.69759 32.36777,-88.69749 32.36765,-88.69743 32.36758,-88.69729 32.36747,-88.6971946189376 32.36738415704383,-88.69769 32.36798"
200
+ multi_polygons[1].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-88.6971946189376 32.36738415704383,-88.69717928571437 32.36736571428582,-88.69719 32.36738,-88.6971946189376 32.36738415704383"
201
+ multi_polygons[2].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-88.69717928571437 32.36736571428582,-88.69713 32.3673,-88.69706 32.36722,-88.69704896551728 32.367208965517285,-88.69717928571437 32.36736571428582"
202
+ multi_polygons[3].map{|p| "#{p.x} #{p.y}"}.join(',').should == "-88.69704896551728 32.367208965517285,-88.69626 32.36626,-88.69697 32.36713,-88.69704896551728 32.367208965517285"
203
+
204
+ end
180
205
 
181
206
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winding-polygon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Xu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-09 00:00:00.000000000 Z
11
+ date: 2013-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec