@@ -15,34 +15,33 @@ var findIndexOfMin = Lib.findIndexOfMin;
15
15
var isAngleInsideSector = Lib . isAngleInsideSector ;
16
16
var angleDelta = Lib . angleDelta ;
17
17
var angleDist = Lib . angleDist ;
18
- var deg2rad = Lib . deg2rad ;
19
18
20
19
/**
21
20
* is pt (r,a) inside polygon made up vertices at angles 'vangles'
22
21
* inside a given polar sector
23
22
*
24
23
* @param {number } r : pt's radial coordinate
25
24
* @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 *
28
27
* @param {array } vangles : angles of polygon vertices in *radians*
29
28
* @return {boolean }
30
29
*/
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 ;
33
32
34
33
var r0 , r1 ;
35
34
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 ] ;
39
38
} else {
40
- r0 = rRng [ 1 ] ;
41
- r1 = rRng [ 0 ] ;
39
+ r0 = rBnds [ 1 ] ;
40
+ r1 = rBnds [ 0 ] ;
42
41
}
43
42
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 ) ) ;
46
45
var xy = [ r * Math . cos ( a ) , r * Math . sin ( a ) ] ;
47
46
return polygonOut . contains ( xy ) && ! polygonIn . contains ( xy ) ;
48
47
}
@@ -128,7 +127,7 @@ function makeRegularPolygon(r, vangles) {
128
127
return vertices ;
129
128
}
130
129
131
- function makeClippedPolygon ( r , sector , vangles ) {
130
+ function makeClippedPolygon ( r , a0 , a1 , vangles ) {
132
131
var len = vangles . length ;
133
132
var vertices = [ ] ;
134
133
var i , j ;
@@ -146,18 +145,15 @@ function makeClippedPolygon(r, sector, vangles) {
146
145
}
147
146
148
147
function isInside ( v ) {
149
- return isAngleInsideSector ( v , sector ) ;
148
+ return isAngleInsideSector ( v , [ a0 , a1 ] ) ;
150
149
}
151
150
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
156
152
// use it to find intersection of v[i0] <-> v[i0-1] edge with sector radius
157
153
var i0 = findIndexOfMin ( vangles , function ( v ) {
158
- return isInside ( v ) ? angleDist ( v , s0 ) : Infinity ;
154
+ return isInside ( v ) ? angleDist ( v , a0 ) : Infinity ;
159
155
} ) ;
160
- var xy0 = findXY ( vangles [ i0 ] , vangles [ cycleIndex ( i0 - 1 ) ] , s0 ) ;
156
+ var xy0 = findXY ( vangles [ i0 ] , vangles [ cycleIndex ( i0 - 1 ) ] , a0 ) ;
161
157
vertices . push ( xy0 ) ;
162
158
163
159
// fill in in-sector vertices
@@ -167,12 +163,12 @@ function makeClippedPolygon(r, sector, vangles) {
167
163
vertices . push ( a2xy ( va ) ) ;
168
164
}
169
165
170
- // find index in sector closest to sector[1] ,
166
+ // find index in sector closest to a1 ,
171
167
// use it to find intersection of v[iN] <-> v[iN+1] edge with sector radius
172
168
var iN = findIndexOfMin ( vangles , function ( v ) {
173
- return isInside ( v ) ? angleDist ( v , s1 ) : Infinity ;
169
+ return isInside ( v ) ? angleDist ( v , a1 ) : Infinity ;
174
170
} ) ;
175
- var xyN = findXY ( vangles [ iN ] , vangles [ cycleIndex ( iN + 1 ) ] , s1 ) ;
171
+ var xyN = findXY ( vangles [ iN ] , vangles [ cycleIndex ( iN + 1 ) ] , a1 ) ;
176
172
vertices . push ( xyN ) ;
177
173
178
174
vertices . push ( [ 0 , 0 ] ) ;
@@ -181,16 +177,16 @@ function makeClippedPolygon(r, sector, vangles) {
181
177
return vertices ;
182
178
}
183
179
184
- function makePolygon ( r , sector , vangles ) {
185
- return Lib . isFullCircle ( sector ) ?
180
+ function makePolygon ( r , a0 , a1 , vangles ) {
181
+ return Lib . isFullCircle ( [ a0 , a1 ] ) ?
186
182
makeRegularPolygon ( r , vangles ) :
187
- makeClippedPolygon ( r , sector , vangles ) ;
183
+ makeClippedPolygon ( r , a0 , a1 , vangles ) ;
188
184
}
189
185
190
- function findPolygonOffset ( r , sector , vangles ) {
186
+ function findPolygonOffset ( r , a0 , a1 , vangles ) {
191
187
var minX = Infinity ;
192
188
var minY = Infinity ;
193
- var vertices = makePolygon ( r , sector , vangles ) ;
189
+ var vertices = makePolygon ( r , a0 , a1 , vangles ) ;
194
190
195
191
for ( var i = 0 ; i < vertices . length ; i ++ ) {
196
192
var v = vertices [ i ] ;
@@ -240,15 +236,16 @@ function transformForSVG(pts0, cx, cy) {
240
236
* path polygon
241
237
*
242
238
* @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*
244
241
* @param {array } vangles : angles of polygon vertices in *radians*
245
242
* @param {number (optional) } cx : x coordinate of center
246
243
* @param {number (optional) } cy : y coordinate of center
247
244
* @return {string } svg path
248
245
*
249
246
*/
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 ) ;
252
249
return 'M' + transformForSVG ( poly , cx , cy ) . join ( 'L' ) ;
253
250
}
254
251
@@ -260,14 +257,15 @@ function pathPolygon(r, sector, vangles, cx, cy) {
260
257
*
261
258
* @param {number } r0 : first radial coordinate
262
259
* @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*
264
262
* @param {array } vangles : angles of polygon vertices in *radians*
265
263
* @param {number (optional) } cx : x coordinate of center
266
264
* @param {number (optional) } cy : y coordinate of center
267
265
* @return {string } svg path
268
266
*
269
267
*/
270
- function pathPolygonAnnulus ( r0 , r1 , sector , vangles , cx , cy ) {
268
+ function pathPolygonAnnulus ( r0 , r1 , a0 , a1 , vangles , cx , cy ) {
271
269
var rStart , rEnd ;
272
270
273
271
if ( r0 < r1 ) {
@@ -278,8 +276,8 @@ function pathPolygonAnnulus(r0, r1, sector, vangles, cx, cy) {
278
276
rEnd = r0 ;
279
277
}
280
278
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 ) ;
283
281
return 'M' + outer . reverse ( ) . join ( 'L' ) + 'M' + inner . join ( 'L' ) ;
284
282
}
285
283
0 commit comments