| 11210 | } |
| 11211 | |
| 11212 | function polygonInside() { |
| 11213 | var winding = 0; |
| 11214 | |
| 11215 | for (var i = 0, n = polygon.length; i < n; ++i) { |
| 11216 | for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { |
| 11217 | a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; |
| 11218 | if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } |
| 11219 | else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } |
| 11220 | } |
| 11221 | } |
| 11222 | |
| 11223 | return winding; |
| 11224 | } |
| 11225 | |
| 11226 | // Buffer geometry within a polygon and then clip it en masse. |
| 11227 | function polygonStart() { |