-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
44 lines (37 loc) · 1.21 KB
/
utils.js
File metadata and controls
44 lines (37 loc) · 1.21 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
function lerp(A, B, t) {
return A + (B-A) * t
}
//https://www.youtube.com/watch?v=fHOLQJo0FjQ
function getIntersection(A, B, C, D) {
const tTop = (D.x - C.x) * (A.y - C.y) - (D.y-C.y) * (A.x-C.x)
const uTop = (C.y - A.y) * (A.x - B.x) - (C.x -A.x) * (A.y - B.y)
const bottom = (D.y - C.y) * (B.x - A.x) -(D.x-C.x) * (B.y - A.y)
if (bottom != 0) {
const t = tTop/bottom
const u = uTop/bottom
if (t>=0 && t<=1 && u>=0 && u<=1) {
return {
x: lerp(A.x, B.x, t),
y: lerp(A.y, B.y, t),
offset: t
}
}
}
return null
}
function polysIntersect(poly1, poly2) {
for (let i = 0; i<poly1.length; i++) {
for (let j = 0; j<poly2.length; j++) {
const touch = getIntersection(
poly1[i],
poly1[(i+1) % poly1.length], //so we do this because if the i+1 value (the next side of the polygon) is equal to the total number of sides, it will just go back to the first point (point 0)
poly2[j],
poly2[(j+1) % poly2.length]
)
if (touch) {
return true
}
}
}
return false
}