| function lerp(a,b,t){ |
| return a+(b-a)*t; |
| } |
|
|
| 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-1;i++){ |
| for(let j=0;j<poly2.length-1;j++){ |
| const touch=getIntersection( |
| poly1[i], |
| poly1[i+1], |
| poly2[j], |
| poly2[j+1] |
| ); |
| if(touch){ |
| return true; |
| } |
| } |
| } |
| return false; |
| } |
|
|
| function getRGBA(value){ |
| const alpha=Math.abs(value); |
| const R=value<0?0:255; |
| const G=R; |
| const B=value>0?0:255; |
| return "rgba("+R+","+G+","+B+","+alpha+")"; |
| } |