UNPKG

intersects

Version:

a simple collection of 2d collision/intersects functions, supporting points, circles, circle outlines (circumference), lines, axis-aligned boxes, and polygons (convex)

1 lines 12.5 kB
!function n(e,i,o){function t(l,c){if(!i[l]){if(!e[l]){var p="function"==typeof require&&require;if(!c&&p)return p(l,!0);if(r)return r(l,!0);var u=new Error("Cannot find module '"+l+"'");throw u.code="MODULE_NOT_FOUND",u}var s=i[l]={exports:{}};e[l][0].call(s.exports,(function(n){return t(e[l][1][n]||n)}),s,s.exports,n,e,i,o)}return i[l].exports}for(var r="function"==typeof require&&require,l=0;l<o.length;l++)t(o[l]);return t}({1:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t,r,l,c){return n<t+l&&n+i>t&&e<r+c&&e+o>r}},{}],2:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t,r,l){var c=i/2,p=o/2,u=Math.abs(t-(n+i/2)),s=Math.abs(r-(e+o/2));if(u>c+l||s>p+l)return!1;if(u<=c||s<=p)return!0;var f=u-c,x=s-p;return f*f+x*x<=l*l}},{}],3:[function(n,e,i){var o=n("./circleOutline-box");e.exports=function(n,e,i,t,r,l,c,p){return o(r,l,c,n,e,i,t,p)}},{"./circleOutline-box":14}],4:[function(n,e,i){var o=n("./ellipse-box");e.exports=function(n,e,i,t,r,l,c,p){return o(r,l,c,p,n,e,i,t)}},{"./ellipse-box":17}],5:[function(n,e,i){"use strict";var o=n("./line-box");e.exports=function(n,e,i,t,r,l,c,p){return o(r,l,c,p,n,e,i,t)}},{"./line-box":25}],6:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t,r){return t>=n&&t<=n+i&&r>=e&&r<=e+o}},{}],7:[function(n,e,i){"use strict";var o=n("./polygon-box");e.exports=function(n,e,i,t,r){return o(r,n,e,i,t)}},{"./polygon-box":40}],8:[function(n,e,i){"use strict";var o=n("./box-circle");e.exports=function(n,e,i,t,r,l,c){return o(t,r,l,c,n,e,i)}},{"./box-circle":2}],9:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t,r){var l=n-o,c=t-e,p=i+r;return l*l+c*c<=p*p}},{}],10:[function(n,e,i){var o=n("./ellipse-circle");e.exports=function(n,e,i,t,r,l,c){return o(t,r,l,c,n,e,i)}},{"./ellipse-circle":18}],11:[function(n,e,i){"use strict";var o=n("./line-circle");e.exports=function(n,e,i,t,r,l,c){return o(t,r,l,c,n,e,i)}},{"./line-circle":26}],12:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t){var r=o-n,l=t-e;return r*r+l*l<=i*i}},{}],13:[function(n,e,i){"use strict";var o=n("./polygon-circle");e.exports=function(n,e,i,t,r){return o(t,n,e,i,r)}},{"./polygon-circle":41}],14:[function(n,e,i){var o=n("./circle-point"),t=n("./box-circle");e.exports=function(n,e,i,r,l,c,p,u){u=u||1;var s=0;return s+=o(n,e,i,r,l)?1:0,s+=o(n,e,i,r+c,l)?1:0,s+=o(n,e,i,r,l+p)?1:0,0===(s+=o(n,e,i,r+c,l+p)?1:0)?t(r,l,c,p,n,e,i):s>=1&&s<=3||(4===s?!(o(n,e,i-u,r,l)&&o(n,e,i-u,r+c,l)&&o(n,e,i-u,r,l+p)&&o(n,e,i-u,r+c,l+p)):void 0)}},{"./box-circle":2,"./circle-point":12}],15:[function(n,e,i){var o=n("./line-circle"),t=n("./circle-point");e.exports=function(n,e,i,r,l,c,p,u){return u=u||1,o(r,l,c,p,n,e,i)&&!(t(n,e,i-u,r,l)&&t(n,e,i-u,c,p))}},{"./circle-point":12,"./line-circle":26}],16:[function(n,e,i){var o=n("./circle-point");e.exports=function(n,e,i,t,r,l){return l=l||1,o(n,e,i,t,r)&&!o(n,e,i-l,t,r)}},{"./circle-point":12}],17:[function(n,e,i){var o=n("./ellipse-line"),t=n("./box-point");e.exports=function(n,e,i,r,l,c,p,u){return t(l,c,p,u,n,e)||o(n,e,i,r,l,c,l+p,c)||o(n,e,i,r,l,c+u,l+p,c+u)||o(n,e,i,r,l,c,l,c+u)||o(n,e,i,r,l+p,c,l+p,c+u)}},{"./box-point":6,"./ellipse-line":21}],18:[function(n,e,i){var o=n("./ellipse-helper");e.exports=function(n,e,i,t,r,l,c){return o.ellipseCircle(n,e,i,t,r,l,c)}},{"./ellipse-helper":20}],19:[function(n,e,i){var o=n("./ellipse-helper");e.exports=function(n,e,i,t,r,l,c,p){return o.ellipseEllipse(n,e,i,t,r,l,c,p)}},{"./ellipse-helper":20}],20:[function(n,e,i){var o,t,r;function l(){o=[],t=[];for(var n=0;n<=10;n++){var e=4<<n;o[n]=.5/Math.cos(4*Math.acos(0)/e),t[n]=.5/(Math.cos(2*Math.acos(0)/e)*Math.cos(2*Math.acos(0)/e))}r=!0}function c(n,e,i,r,l,c,p){for(var u=1;u<=10;u++){var s=(i+l)*o[u],f=(r+c)*o[u],x=n-s,a=e-f;if(x*x+a*a<=p)return!0;var g=l-s,y=c-f;if(x*g+a*y>=0&&x*g+a*y<=g*g+y*y&&(a*g-x*y>=0||p*(g*g+y*y)>=(a*g-x*y)*(a*g-x*y)))return!0;var v=i-s,b=r-f;if(x*v+a*b>=0&&x*v+a*b<=v*v+b*b&&(a*v-x*b<=0||p*(v*v+b*b)>=(a*v-x*b)*(a*v-x*b)))return!0;var h=(i+s)*t[u],M=(r+f)*t[u];if((h-n)*(h-n)+(M-e)*(M-e)<p)l=s,c=f;else{var O=s-h+s,P=f-M+f;if(!((O-n)*(O-n)+(P-e)*(P-e)<p)){var C=h-s,L=M-f;if(a*C-x*L<=0||p*(C*C+L*L)>(a*C-x*L)*(a*C-x*L))if(x*C+a*L>0){if(Math.abs(x*C+a*L)<=C*C+L*L||(n-h)*(i-h)+(e-M)*(r-M)>=0){l=s,c=f;continue}}else if(-(x*C+a*L)<=C*C+L*L||(n-O)*(l-O)+(e-P)*(c-P)>=0){i=s,r=f;continue}return!1}i=s,r=f}}return!1}e.exports={ellipseCircle:function(n,e,i,o,t,p,u){r||l();var s=Math.abs(t-n),f=Math.abs(p-e);return s*s+(o-f)*(o-f)<=u*u||(i-s)*(i-s)+f*f<=u*u||s*o+f*i<=i*o||(s*o+f*i-i*o)*(s*o+f*i-i*o)<=u*u*(i*i+o*o)&&s*i-f*o>=-o*o&&s*i-f*o<=i*i||((s-i)*(s-i)+(f-o)*(f-o)<=u*u||s<=i&&f-u<=o||f<=o&&s-u<=i)&&c(s,f,i,0,0,o,u*u)},ellipseEllipse:function(n,e,i,o,t,p,u,s){r||l();var f=Math.abs(t-n)*s,x=Math.abs(p-e)*u;i*=s;var a=u*s;return f*f+((o*=u)-x)*(o-x)<=a*a||(i-f)*(i-f)+x*x<=a*a||f*o+x*i<=i*o||(f*o+x*i-i*o)*(f*o+x*i-i*o)<=a*a*(i*i+o*o)&&f*i-x*o>=-o*o&&f*i-x*o<=i*i||((f-i)*(f-i)+(x-o)*(x-o)<=a*a||f<=i&&x-a<=o||x<=o&&f-a<=i)&&c(f,x,i,0,0,o,a*a)}}},{}],21:[function(n,e,i){e.exports=function(n,e,i,o,t,r,l,c){t-=n,l-=n,r-=e,c-=e;var p=Math.pow(l-t,2)/i/i+Math.pow(c-r,2)/o/o,u=2*t*(l-t)/i/i+2*r*(c-r)/o/o,s=u*u-4*p*(t*t/i/i+r*r/o/o-1);if(0===s){var f=-u/2/p;return f>=0&&f<=1}if(s>0){var x=Math.sqrt(s),a=(-u+x)/2/p,g=(-u-x)/2/p;return a>=0&&a<=1||g>=0&&g<=1}return!1}},{}],22:[function(n,e,i){e.exports=function(n,e,i,o,t,r){return Math.pow(t-n,2)/(i*i)+Math.pow(r-e,2)/(o*o)<=1}},{}],23:[function(n,e,i){var o=n("./polygon-ellipse");e.exports=function(n,e,i,t,r){return o(r,n,e,i,t)}},{"./polygon-ellipse":42}],24:[function(n,e,i){e.exports={circlePoint:n("./circle-point"),circleCircle:n("./circle-circle"),circleLine:n("./circle-line"),circleBox:n("./circle-box"),circlePolygon:n("./circle-polygon"),circleEllipse:n("./circle-ellipse"),circleOutlineBox:n("./circleOutline-box"),circleOutlineLine:n("./circleOutline-line"),circleOutlinePoint:n("./circleOutline-point"),polygonPoint:n("./polygon-point"),polygonLine:n("./polygon-line"),polygonPolygon:n("./polygon-polygon"),polygonBox:n("./polygon-box"),polygonCircle:n("./polygon-circle"),polygonEllipse:n("./polygon-ellipse"),boxPoint:n("./box-point"),boxBox:n("./box-box"),boxLine:n("./box-line"),boxPolygon:n("./box-polygon"),boxCircle:n("./box-circle"),boxEllipse:n("./box-ellipse"),boxCircleOutline:n("./box-circleOutline"),pointBox:n("./point-box"),pointPolygon:n("./point-polygon"),pointCircle:n("./point-circle"),pointLine:n("./point-line"),pointEllipse:n("./point-ellipse"),pointCircleOutline:n("./point-circleOutline"),lineLine:n("./line-line"),lineBox:n("./line-box"),linePolygon:n("./line-polygon"),lineCircle:n("./line-circle"),linePoint:n("./line-point"),lineEllipse:n("./line-ellipse"),lineCircleOutline:n("./line-circleOutline"),ellipsePoint:n("./ellipse-point"),ellipseLine:n("./ellipse-line"),ellipseBox:n("./ellipse-box"),ellipseCircle:n("./ellipse-circle"),ellipseEllipse:n("./ellipse-ellipse"),ellipsePolygon:n("./ellipse-polygon")}},{"./box-box":1,"./box-circle":2,"./box-circleOutline":3,"./box-ellipse":4,"./box-line":5,"./box-point":6,"./box-polygon":7,"./circle-box":8,"./circle-circle":9,"./circle-ellipse":10,"./circle-line":11,"./circle-point":12,"./circle-polygon":13,"./circleOutline-box":14,"./circleOutline-line":15,"./circleOutline-point":16,"./ellipse-box":17,"./ellipse-circle":18,"./ellipse-ellipse":19,"./ellipse-line":21,"./ellipse-point":22,"./ellipse-polygon":23,"./line-box":25,"./line-circle":26,"./line-circleOutline":27,"./line-ellipse":28,"./line-line":29,"./line-point":30,"./line-polygon":31,"./point-box":34,"./point-circle":35,"./point-circleOutline":36,"./point-ellipse":37,"./point-line":38,"./point-polygon":39,"./polygon-box":40,"./polygon-circle":41,"./polygon-ellipse":42,"./polygon-line":43,"./polygon-point":44,"./polygon-polygon":45}],25:[function(n,e,i){"use strict";var o=n("./box-point"),t=n("./line-line");e.exports=function(n,e,i,r,l,c,p,u){return!(!o(l,c,p,u,n,e)&&!o(l,c,p,u,i,r))||(t(n,e,i,r,l,c,l+p,c)||t(n,e,i,r,l+p,c,l+p,c+u)||t(n,e,i,r,l,c+u,l+p,c+u)||t(n,e,i,r,l,c,l,c+u))}},{"./box-point":6,"./line-line":29}],26:[function(n,e,i){"use strict";function o(n,e){return n[0]*e[0]+n[1]*e[1]}e.exports=function(n,e,i,t,r,l,c){var p=[r-n,l-e],u=[i-n,t-e],s=o(u,u),f=o(p,u)/s,x=[u[0]*(f=(f=f<0?0:f)>1?1:f)+n-r,u[1]*f+e-l];return o(x,x)<=c*c}},{}],27:[function(n,e,i){var o=n("./circleOutline-line");e.exports=function(n,e,i,t,r,l,c,p){return o(r,l,c,n,e,i,t,p)}},{"./circleOutline-line":15}],28:[function(n,e,i){var o=n("./ellipse-line");e.exports=function(n,e,i,t,r,l,c,p){return o(r,l,c,p,n,e,i,t)}},{"./ellipse-line":21}],29:[function(n,e,i){"use strict";const o=n("./lineToPolygon"),t=n("./polygon-polygon"),r=n("./line-polygon"),l=n("./lineToLine");e.exports=function(n,e,i,c,p,u,s,f,x,a){return x||a?function(n,e,i,l,c,p,u,s,f,x){if(f&&x)return t(o(n,e,i,l,f),o(c,p,u,s,x));if(f)return r(c,p,u,s,o(n,e,i,l,f));if(x)return r(n,e,i,l,o(c,p,u,s,f))}(n,e,i,c,p,u,s,f,x,a):l(n,e,i,c,p,u,s,f)}},{"./line-polygon":31,"./lineToLine":32,"./lineToPolygon":33,"./polygon-polygon":45}],30:[function(n,e,i){"use strict";function o(n,e,i,o){return Math.sqrt(Math.pow(n-i,2)+Math.pow(e-o,2))}e.exports=function(n,e,i,t,r,l,c){return c=c||1,Math.abs(o(n,e,i,t)-(o(n,e,r,l)+o(i,t,r,l)))<=c}},{}],31:[function(n,e,i){var o=n("./polygon-point"),t=n("./lineToLine");e.exports=function(n,e,i,r,l,c){var p=l.length;if(o(l,n,e,c))return!0;for(var u=0;u<p;u+=2){var s=(u+2)%p;if(t(n,e,i,r,l[u],l[u+1],l[s],l[s+1]))return!0}return!1}},{"./lineToLine":32,"./polygon-point":44}],32:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t,r,l,c){var p=i-n,u=o-e,s=l-t,f=c-r,x=(-u*(n-t)+p*(e-r))/(-s*u+p*f),a=(s*(e-r)-f*(n-t))/(-s*u+p*f);return x>=0&&x<=1&&a>=0&&a<=1}},{}],33:[function(n,e,i){"use strict";e.exports=function(n,e,i,o,t){const r=Math.atan2(o-e,i-n)-Math.PI/2,l=t/2,c=Math.cos(r)*l,p=Math.sin(r)*l;return[n-c,e-p,i-c,o-p,i+c,o+p,n+c,e+p]}},{}],34:[function(n,e,i){"use strict";var o=n("./box-point");e.exports=function(n,e,i,t,r,l){return o(i,t,r,l,n,e)}},{"./box-point":6}],35:[function(n,e,i){"use strict";var o=n("./circle-point");e.exports=function(n,e,i,t,r){return o(i,t,r,n,e)}},{"./circle-point":12}],36:[function(n,e,i){var o=n("./circleOutline-point");e.exports=function(n,e,i,t,r,l){return o(n,e,i,t,r,l)}},{"./circleOutline-point":16}],37:[function(n,e,i){var o=n("./ellipse-point");e.exports=function(n,e,i,t,r,l){return o(i,t,r,l,n,e)}},{"./ellipse-point":22}],38:[function(n,e,i){"use strict";var o=n("./line-point");e.exports=function(n,e,i,t,r,l){return o(i,t,r,l,n,e)}},{"./line-point":30}],39:[function(n,e,i){"use strict";var o=n("./polygon-point");e.exports=function(n,e,i,t){return o(i,n,e,t)}},{"./polygon-point":44}],40:[function(n,e,i){"use strict";var o=n("./polygon-polygon");e.exports=function(n,e,i,t,r){return o(n,[e,i,e+t,i,e+t,i+r,e,i+r])}},{"./polygon-polygon":45}],41:[function(n,e,i){var o=n("./polygon-point"),t=n("./line-circle");e.exports=function(n,e,i,r,l){if(o(n,e,i,l))return!0;for(var c=n.length,p=0;p<c-2;p+=2)if(t(n[p],n[p+1],n[p+2],n[p+3],e,i,r))return!0;return t(n[0],n[1],n[c-2],n[c-1],e,i,r)}},{"./line-circle":26,"./polygon-point":44}],42:[function(n,e,i){var o=n("./polygon-point"),t=n("./line-ellipse");e.exports=function(n,e,i,r,l){if(o(n,e,i))return!0;for(var c=n.length,p=0;p<c-2;p+=2)if(t(n[p],n[p+1],n[p+2],n[p+3],e,i,r,l))return!0;return t(n[0],n[1],n[c-2],n[c-1],e,i,r,l)}},{"./line-ellipse":28,"./polygon-point":44}],43:[function(n,e,i){var o=n("./line-polygon");e.exports=function(n,e,i,t,r,l){return o(e,i,t,r,n,l)}},{"./line-polygon":31}],44:[function(n,e,i){"use strict";const o=n("./line-point");e.exports=function(n,e,i,t){var r,l,c=n.length,p=!1;for(r=0,l=c-2;r<c;r+=2)n[r+1]>i!=n[l+1]>i&&e<(n[l]-n[r])*(i-n[r+1])/(n[l+1]-n[r+1])+n[r]&&(p=!p),l=r;if(p)return!0;for(r=0;r<c;r+=2){var u,s,f=n[r],x=n[r+1];if(r===c-2?(u=n[0],s=n[1]):(u=n[r+2],s=n[r+3]),o(f,x,u,s,e,i,t))return!0}return!1}},{"./line-point":30}],45:[function(n,e,i){"use strict";e.exports=function(n,e){for(var i,o,t,r,l,c,p=n,u=e,s=[p,u],f=0;f<s.length;f++)for(var x=s[f],a=0;a<x.length;a+=2){var g=(a+2)%x.length,y={x:x[g+1]-x[a+1],y:x[a]-x[g]};for(i=o=null,c=0;c<p.length;c+=2)t=y.x*p[c]+y.y*p[c+1],(null===i||t<i)&&(i=t),(null===o||t>o)&&(o=t);for(r=l=null,c=0;c<u.length;c+=2)t=y.x*u[c]+y.y*u[c+1],(null===r||t<r)&&(r=t),(null===l||t>l)&&(l=t);if(o<r||l<i)return!1}return!0}},{}],46:[function(n,e,i){window.Intersects=n("./index.js")},{"./index.js":24}]},{},[46]);