23 lines
		
	
	
		
			589 B
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			23 lines
		
	
	
		
			589 B
		
	
	
	
		
			JavaScript
		
	
	
| 
								 | 
							
								import windingLine from './windingLine.js';
							 | 
						||
| 
								 | 
							
								var EPSILON = 1e-8;
							 | 
						||
| 
								 | 
							
								function isAroundEqual(a, b) {
							 | 
						||
| 
								 | 
							
								    return Math.abs(a - b) < EPSILON;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export function contain(points, x, y) {
							 | 
						||
| 
								 | 
							
								    var w = 0;
							 | 
						||
| 
								 | 
							
								    var p = points[0];
							 | 
						||
| 
								 | 
							
								    if (!p) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    for (var i = 1; i < points.length; i++) {
							 | 
						||
| 
								 | 
							
								        var p2 = points[i];
							 | 
						||
| 
								 | 
							
								        w += windingLine(p[0], p[1], p2[0], p2[1], x, y);
							 | 
						||
| 
								 | 
							
								        p = p2;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    var p0 = points[0];
							 | 
						||
| 
								 | 
							
								    if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {
							 | 
						||
| 
								 | 
							
								        w += windingLine(p[0], p[1], p0[0], p0[1], x, y);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return w !== 0;
							 | 
						||
| 
								 | 
							
								}
							 |