| | 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+")"; |
| | } |