1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| import windingLine from './windingLine';
| import { VectorArray } from '../core/vector';
|
| const EPSILON = 1e-8;
|
| function isAroundEqual(a: number, b: number): boolean {
| return Math.abs(a - b) < EPSILON;
| }
|
| export function contain(points: VectorArray[], x: number, y: number) {
| let w = 0;
| let p = points[0];
|
| if (!p) {
| return false;
| }
|
| for (let i = 1; i < points.length; i++) {
| const p2 = points[i];
| w += windingLine(p[0], p[1], p2[0], p2[1], x, y);
| p = p2;
| }
|
| // Close polygon
| const 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;
| }
|
|