@@ -15,34 +15,33 @@ var findIndexOfMin = Lib.findIndexOfMin;
1515var isAngleInsideSector = Lib . isAngleInsideSector ;
1616var angleDelta = Lib . angleDelta ;
1717var angleDist = Lib . angleDist ;
18- var deg2rad = Lib . deg2rad ;
1918
2019/**
2120 * is pt (r,a) inside polygon made up vertices at angles 'vangles'
2221 * inside a given polar sector
2322 *
2423 * @param {number } r : pt's radial coordinate
2524 * @param {number } a : pt's angular coordinate in *radians*
26- * @param {2-item array } rRng : sector's radial range
27- * @param {2-item array } sector : sector angles in *degrees *
25+ * @param {2-item array } rBnds : sector's radial bounds
26+ * @param {2-item array } aBnds : sector's angular bounds *radians *
2827 * @param {array } vangles : angles of polygon vertices in *radians*
2928 * @return {boolean }
3029 */
31- function isPtInsidePolygon ( r , a , rRng , sector , vangles ) {
32- if ( ! isAngleInsideSector ( a , sector ) ) return false ;
30+ function isPtInsidePolygon ( r , a , rBnds , aBnds , vangles ) {
31+ if ( ! isAngleInsideSector ( a , aBnds ) ) return false ;
3332
3433 var r0 , r1 ;
3534
36- if ( rRng [ 0 ] < rRng [ 1 ] ) {
37- r0 = rRng [ 0 ] ;
38- r1 = rRng [ 1 ] ;
35+ if ( rBnds [ 0 ] < rBnds [ 1 ] ) {
36+ r0 = rBnds [ 0 ] ;
37+ r1 = rBnds [ 1 ] ;
3938 } else {
40- r0 = rRng [ 1 ] ;
41- r1 = rRng [ 0 ] ;
39+ r0 = rBnds [ 1 ] ;
40+ r1 = rBnds [ 0 ] ;
4241 }
4342
44- var polygonIn = polygonTester ( makePolygon ( r0 , sector , vangles ) ) ;
45- var polygonOut = polygonTester ( makePolygon ( r1 , sector , vangles ) ) ;
43+ var polygonIn = polygonTester ( makePolygon ( r0 , aBnds [ 0 ] , aBnds [ 1 ] , vangles ) ) ;
44+ var polygonOut = polygonTester ( makePolygon ( r1 , aBnds [ 0 ] , aBnds [ 1 ] , vangles ) ) ;
4645 var xy = [ r * Math . cos ( a ) , r * Math . sin ( a ) ] ;
4746 return polygonOut . contains ( xy ) && ! polygonIn . contains ( xy ) ;
4847}
@@ -128,7 +127,7 @@ function makeRegularPolygon(r, vangles) {
128127 return vertices ;
129128}
130129
131- function makeClippedPolygon ( r , sector , vangles ) {
130+ function makeClippedPolygon ( r , a0 , a1 , vangles ) {
132131 var len = vangles . length ;
133132 var vertices = [ ] ;
134133 var i , j ;
@@ -146,18 +145,15 @@ function makeClippedPolygon(r, sector, vangles) {
146145 }
147146
148147 function isInside ( v ) {
149- return isAngleInsideSector ( v , sector ) ;
148+ return isAngleInsideSector ( v , [ a0 , a1 ] ) ;
150149 }
151150
152- var s0 = deg2rad ( sector [ 0 ] ) ;
153- var s1 = deg2rad ( sector [ 1 ] ) ;
154-
155- // find index in sector closest to sector[0],
151+ // find index in sector closest to a0
156152 // use it to find intersection of v[i0] <-> v[i0-1] edge with sector radius
157153 var i0 = findIndexOfMin ( vangles , function ( v ) {
158- return isInside ( v ) ? angleDist ( v , s0 ) : Infinity ;
154+ return isInside ( v ) ? angleDist ( v , a0 ) : Infinity ;
159155 } ) ;
160- var xy0 = findXY ( vangles [ i0 ] , vangles [ cycleIndex ( i0 - 1 ) ] , s0 ) ;
156+ var xy0 = findXY ( vangles [ i0 ] , vangles [ cycleIndex ( i0 - 1 ) ] , a0 ) ;
161157 vertices . push ( xy0 ) ;
162158
163159 // fill in in-sector vertices
@@ -167,12 +163,12 @@ function makeClippedPolygon(r, sector, vangles) {
167163 vertices . push ( a2xy ( va ) ) ;
168164 }
169165
170- // find index in sector closest to sector[1] ,
166+ // find index in sector closest to a1 ,
171167 // use it to find intersection of v[iN] <-> v[iN+1] edge with sector radius
172168 var iN = findIndexOfMin ( vangles , function ( v ) {
173- return isInside ( v ) ? angleDist ( v , s1 ) : Infinity ;
169+ return isInside ( v ) ? angleDist ( v , a1 ) : Infinity ;
174170 } ) ;
175- var xyN = findXY ( vangles [ iN ] , vangles [ cycleIndex ( iN + 1 ) ] , s1 ) ;
171+ var xyN = findXY ( vangles [ iN ] , vangles [ cycleIndex ( iN + 1 ) ] , a1 ) ;
176172 vertices . push ( xyN ) ;
177173
178174 vertices . push ( [ 0 , 0 ] ) ;
@@ -181,16 +177,16 @@ function makeClippedPolygon(r, sector, vangles) {
181177 return vertices ;
182178}
183179
184- function makePolygon ( r , sector , vangles ) {
185- return Lib . isFullCircle ( sector ) ?
180+ function makePolygon ( r , a0 , a1 , vangles ) {
181+ return Lib . isFullCircle ( [ a0 , a1 ] ) ?
186182 makeRegularPolygon ( r , vangles ) :
187- makeClippedPolygon ( r , sector , vangles ) ;
183+ makeClippedPolygon ( r , a0 , a1 , vangles ) ;
188184}
189185
190- function findPolygonOffset ( r , sector , vangles ) {
186+ function findPolygonOffset ( r , a0 , a1 , vangles ) {
191187 var minX = Infinity ;
192188 var minY = Infinity ;
193- var vertices = makePolygon ( r , sector , vangles ) ;
189+ var vertices = makePolygon ( r , a0 , a1 , vangles ) ;
194190
195191 for ( var i = 0 ; i < vertices . length ; i ++ ) {
196192 var v = vertices [ i ] ;
@@ -240,15 +236,16 @@ function transformForSVG(pts0, cx, cy) {
240236 * path polygon
241237 *
242238 * @param {number } r : polygon 'radius'
243- * @param {2-item array } sector : polar sector in which polygon is clipped
239+ * @param {number } a0 : first angular coordinate in *radians*
240+ * @param {number } a1 : second angular coordinate in *radians*
244241 * @param {array } vangles : angles of polygon vertices in *radians*
245242 * @param {number (optional) } cx : x coordinate of center
246243 * @param {number (optional) } cy : y coordinate of center
247244 * @return {string } svg path
248245 *
249246 */
250- function pathPolygon ( r , sector , vangles , cx , cy ) {
251- var poly = makePolygon ( r , sector , vangles ) ;
247+ function pathPolygon ( r , a0 , a1 , vangles , cx , cy ) {
248+ var poly = makePolygon ( r , a0 , a1 , vangles ) ;
252249 return 'M' + transformForSVG ( poly , cx , cy ) . join ( 'L' ) ;
253250}
254251
@@ -260,14 +257,15 @@ function pathPolygon(r, sector, vangles, cx, cy) {
260257 *
261258 * @param {number } r0 : first radial coordinate
262259 * @param {number } r1 : second radial coordinate
263- * @param {2-item array } sector : polar sector in which polygon is clipped
260+ * @param {number } a0 : first angular coordinate in *radians*
261+ * @param {number } a1 : second angular coordinate in *radians*
264262 * @param {array } vangles : angles of polygon vertices in *radians*
265263 * @param {number (optional) } cx : x coordinate of center
266264 * @param {number (optional) } cy : y coordinate of center
267265 * @return {string } svg path
268266 *
269267 */
270- function pathPolygonAnnulus ( r0 , r1 , sector , vangles , cx , cy ) {
268+ function pathPolygonAnnulus ( r0 , r1 , a0 , a1 , vangles , cx , cy ) {
271269 var rStart , rEnd ;
272270
273271 if ( r0 < r1 ) {
@@ -278,8 +276,8 @@ function pathPolygonAnnulus(r0, r1, sector, vangles, cx, cy) {
278276 rEnd = r0 ;
279277 }
280278
281- var inner = transformForSVG ( makePolygon ( rStart , sector , vangles ) , cx , cy ) ;
282- var outer = transformForSVG ( makePolygon ( rEnd , sector , vangles ) , cx , cy ) ;
279+ var inner = transformForSVG ( makePolygon ( rStart , a0 , a1 , vangles ) , cx , cy ) ;
280+ var outer = transformForSVG ( makePolygon ( rEnd , a0 , a1 , vangles ) , cx , cy ) ;
283281 return 'M' + outer . reverse ( ) . join ( 'L' ) + 'M' + inner . join ( 'L' ) ;
284282}
285283
0 commit comments