-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
58 lines (52 loc) · 1.87 KB
/
Copy pathutils.js
File metadata and controls
58 lines (52 loc) · 1.87 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function lerp(A,B,t){
return A+(B-A)*t;
//allows to move A towards B percentage wise (slowly instead of suddenly)
//when lanes=0 then x=left coordinate;
//when lanes=3 then x=right coordinate
////when lanes=0to3 any value then x=b/w lt and rt coordinate;
}
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;
}
/*the getIntersection() function takes four points representing two
line segments and determines whether they intersect. If an
intersection is found, the function returns the coordinates of
the intersection point. Otherwise, it returns 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],
// % allows to make it 0 index hence last coordinate connects to
// first coordinate in polygon ie. 1-2-3-4 & 4th coord to again 1st coord
poly2[j],
poly2[(j+1)%poly2.length],
//comparing poly1 to corresponding poly2 coordinate if they intersect
//each other
);
if(touch){
return true;
}
}
}
return false;
}
function getRandomColor(){
const hue=290+Math.random()*260;
return "hsl("+hue+", 100%, 60%)";//100 saturation and 60 lightness
}