collides
Version:
Convex polygon collision detection
1 lines • 1.53 kB
JavaScript
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.collides=e():t.collides=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";var n=r(1);t.exports=function(t,e){return t=n.parse(t),e=n.parse(e),n.intersect(t,e)&&n.intersect(e,t)}},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r={normalize:function(t){var e=Math.sqrt(t.x*t.x+t.y*t.y);return{x:t.x/e,y:t.y/e}},dot:function(t,e){return t.x*e.x+t.y*e.y},perpendicular:function(t){return{x:-t.y,y:t.x}},project:function(t,e){for(var r=-(1/0),n=1/0,i=0;i<t.length;++i){var o=this.dot(t[i],e);r=Math.max(o,r),n=Math.min(o,n)}return{max:r,min:n}},distance:function(t,e){return t.min<e.min?e.min-t.max:t.min-e.max},intersect:function(t,e){for(var r=0;r<t.length;++r){var n=(r+1)%t.length,i={x:t[n].x-t[r].x,y:t[n].y-t[r].y},o=this.perpendicular(i),u=this.project(t,o),c=this.project(e,o);if(this.distance(u,c)>0)return!1}return!0},type:function(t){return t.width?"rectangle":"polygon"},types:{rectangle:function(t){return[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y-t.height},{x:t.x,y:t.y-t.height}]}},parse:function(t){return Array.isArray(t)?t:this.types[this.type(t)](t)}};e["default"]=r,t.exports=e["default"]}])});