winding-polygon 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/winding-polygon/segment.rb +3 -0
- data/lib/winding-polygon/sweep_line.rb +3 -1
- data/lib/winding-polygon/version.rb +1 -1
- data/spec/winding-polygon_spec.rb +14 -0
- 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: f8c0df6f0765c7a2a1a8a060d1bb6c78510ecef9
|
4
|
+
data.tar.gz: 6a0d538f3f4b56cf79c1445953da99f363130b27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77e7991c609942476f78bf67c2944ccdde34d88f99e17cbc51823f98634ce6000bae5aa47635dc811b24cc125da188b011fc2d2bef2b2f1bd1fd1aed8b9a656e
|
7
|
+
data.tar.gz: 42958476e6918e4794eaa881c2c54624baf0aa41521865af4887341a36bdcb7d960c0abeaf326a0d54ba23614e87ebf4e2fc63c9d630b1ff09abc8de1d4410e1
|
@@ -25,6 +25,7 @@ module WindingPolygon
|
|
25
25
|
|
26
26
|
def == (other_segment)
|
27
27
|
return true if @left_point.y == other_segment.left_point.y
|
28
|
+
return false
|
28
29
|
end
|
29
30
|
|
30
31
|
def to_s
|
@@ -38,6 +39,8 @@ module WindingPolygon
|
|
38
39
|
denominator = (@right_point.y - @left_point.y) * (other_segment.left_point.x - other_segment.right_point.x) -
|
39
40
|
(other_segment.left_point.y - other_segment.right_point.y) * (@right_point.x - @left_point.x)
|
40
41
|
|
42
|
+
return nil if denominator==0
|
43
|
+
|
41
44
|
t = numerator.to_f / denominator
|
42
45
|
|
43
46
|
x = @left_point.x + t * (@right_point.x - @left_point.x)
|
@@ -134,7 +134,9 @@ module WindingPolygon
|
|
134
134
|
return nil if (lsign * rsign > 0)
|
135
135
|
|
136
136
|
#segments s1 and s2 straddle. Intersect exists.
|
137
|
-
s1.intersection_point_with(s2)
|
137
|
+
intersection_point = s1.intersection_point_with(s2)
|
138
|
+
return nil if intersection_point.nil?
|
139
|
+
intersection_point
|
138
140
|
end
|
139
141
|
end
|
140
142
|
end
|
@@ -64,5 +64,19 @@ describe WindingPolygon do
|
|
64
64
|
|
65
65
|
end
|
66
66
|
|
67
|
+
it 'should decompose a production complex polygon 4 into two simple polygons' do
|
68
|
+
|
69
|
+
points = JSON.parse("[[-87.80356,41.96514],[-87.80115,41.96182],[-87.79909,41.96156],[-87.79635,41.96131],[-87.79394,41.96105],[-87.79188,41.9608],[-87.78914,41.95978],[-87.78708,41.95876],[-87.78467,41.95722],[-87.78193,41.95544],[-87.77987,41.95339],[-87.77781,41.9511],[-87.77541,41.94803],[-87.773,41.94446],[-87.7706,41.94063],[-87.76785,41.9368],[-87.76545,41.93271],[-87.76339,41.92658],[-87.76133,41.91687],[-87.76373,41.87522],[-87.76579,41.87445],[-87.76854,41.87394],[-87.7706,41.87368],[-87.77335,41.87343],[-87.77575,41.87266],[-87.77815,41.8724],[-87.78021,41.87215],[-87.78296,41.87164],[-87.78536,41.87113],[-87.78776,41.87113],[-87.78982,41.87113],[-87.79223,41.87113],[-87.79463,41.87113],[-87.79703,41.87113],[-87.79978,41.87138],[-87.80184,41.87189],[-87.8039,41.8724],[-87.8063,41.87317],[-87.80871,41.87419],[-87.81077,41.87471],[-87.81283,41.87547],[-87.81523,41.87649],[-87.81729,41.87726],[-87.81935,41.87752],[-87.82141,41.87777],[-87.82347,41.87803],[-87.82622,41.87828],[-87.82862,41.87854],[-87.83171,41.87854],[-87.83377,41.8788],[-87.83652,41.87931],[-87.83926,41.88007],[-87.84132,41.88058],[-87.84373,41.88135],[-87.84613,41.88237],[-87.84888,41.88365],[-87.85094,41.88493],[-87.85334,41.88697],[-87.8554,41.89055],[-87.85746,41.89515],[-87.85952,41.90026],[-87.86158,41.90435],[-87.85952,41.92913],[-87.85746,41.93373],[-87.8554,41.94139],[-87.85334,41.94573],[-87.85094,41.94778],[-87.84888,41.94905],[-87.84647,41.95059],[-87.84304,41.95263],[-87.84098,41.95365],[-87.83892,41.95442],[-87.83514,41.95671],[-87.83308,41.95773],[-87.83102,41.95901],[-87.82862,41.96003],[-87.82484,41.96207],[-87.82107,41.9631],[-87.81901,41.9631],[-87.81695,41.9631],[-87.81351,41.9631],[-87.81042,41.96284],[-87.80699,41.96233],[-87.80424,41.96207],[-87.80184,41.96156],[-87.79978,41.96105],[-87.79703,41.95901],[-87.80356,41.96514]]")
|
70
|
+
polygon = WindingPolygon::Polygon.new(points.map{|item| WindingPolygon::Point.new(item[0].to_f,item[1].to_f)})
|
71
|
+
|
72
|
+
multi_polygons = []
|
73
|
+
WindingPolygon.decompose(polygon,multi_polygons)
|
74
|
+
multi_polygons.should_not be_nil
|
75
|
+
|
76
|
+
multi_polygons.size.should == 2
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
67
81
|
|
68
82
|
end
|