@equinor/videx-vector2
Version:
Vector2 class library written in javascript.
2 lines (1 loc) • 7.94 kB
JavaScript
!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):(global="undefined"!=typeof globalThis?globalThis:global||self)["videx-vector2"]=factory()}(this,(function(){"use strict";function add(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]+b[i];return target}function sub(a,b,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]-b[i];return target}function scale(a,factor,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=a[i]*factor;return target}function magnitude(a){var sq=function(a){for(var sum=0,i=0;i<a.length;i++)sum+=Math.pow(a[i],2);return sum}(a);return 0===sq?sq:Math.sqrt(sq)}function normalize(a,target){void 0===target&&(target=a);var len=magnitude(a);return 0===len?function(value,target){for(var i=0;i<target.length;i++)target[i]=value;return target}(0,target):scale(a,1/len,target)}function isZeroVector(a,epsilon){void 0===epsilon&&(epsilon=0),void 0===epsilon&&(epsilon=0);for(var i=0;i<a.length;i++)if(Math.abs(a[i])>epsilon)return!1;return!0}var RAD2DEG=180/Math.PI,DEG2RAD=Math.PI/180;function rotate(v,rad,target){var cr=Math.cos(rad),sr=Math.sin(rad),x=v[0];return target[0]=cr*x-sr*v[1],target[1]=sr*x+cr*v[1],target}function angleRight(v){return Math.atan2(v[1],v[0])}function signedAngle(a,b){var phi=Math.atan2(b[1],b[0])-Math.atan2(a[1],a[0]);return phi>Math.PI?phi-=2*Math.PI:phi<=-Math.PI&&(phi+=2*Math.PI),phi}var Vector2=function(){function Vector2(a){for(var b=[],_i=1;_i<arguments.length;_i++)b[_i-1]=arguments[_i];this.isMutating=!1,this.length=2,"number"==typeof a?"number"==typeof b[0]?(this[0]=a,this[1]=b[0]):(this[0]=a,this[1]=a):"x"in a&&"y"in a?(this[0]=a.x,this[1]=a.y):(this[0]=a[0],this[1]=a[1])}return Object.defineProperty(Vector2.prototype,"x",{get:function(){return this[0]},set:function(value){this[0]=value},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,"y",{get:function(){return this[1]},set:function(value){this[1]=value},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,"magnitude",{get:function(){return magnitude(this)},set:function(val){scale(this,val/magnitude(this),this)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,"mutable",{get:function(){return this.isMutating=!0,this},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2.prototype,"immutable",{get:function(){return this.isMutating=!1,this},enumerable:!1,configurable:!0}),Vector2.prototype.set=function(a,b){return"number"==typeof a?"number"==typeof b?(this[0]=a,this[1]=b):(this[0]=a,this[1]=a):(this[0]=a[0],this[1]=a[1]),this},Vector2.prototype.add=function(a,b){return void 0===b&&(b=0),"number"==typeof a?this.isMutating?add(this,[a,b]):add(this.clone(),[a,b]):this.isMutating?add(this,a):add(this.clone(),a)},Vector2.add=function(a,b){return add(new Vector2(a),b)},Vector2.prototype.sub=function(a,b){return void 0===b&&(b=0),"number"==typeof a?this.isMutating?sub(this,[a,b]):sub(this.clone(),[a,b]):this.isMutating?sub(this,a):sub(this.clone(),a)},Vector2.sub=function(a,b){return sub(new Vector2(a),b)},Vector2.prototype.subFrom=function(a,b){return void 0===b&&(b=0),"number"==typeof a?this.isMutating?(this[0]=a-this[0],this[1]=b-this[1],this):new Vector2(a-this[0],b-this[1]):this.isMutating?(this[0]=a[0]-this[0],this[1]=a[1]-this[1],this):new Vector2(a[0]-this[0],a[1]-this[1])},Vector2.divide=function(v,n){return scale(new Vector2(v),1/n)},Vector2.multiply=function(v,n){return scale(new Vector2(v),n)},Vector2.prototype.scale=function(n){return scale(this,n,this.isMutating?this:Vector2.zero)},Vector2.prototype.rescale=function(n){var len=magnitude(this);return len<=0?this.isMutating?this:Vector2.zero:scale(this,n/len,this.isMutating?this:Vector2.zero)},Vector2.prototype.clampMagnitude=function(n){var len=magnitude(this);return len>n?scale(this,n/len,this.isMutating?this:Vector2.zero):this.isMutating?this:this.clone()},Vector2.prototype.rotate=function(rad){return rotate(this,rad,this.isMutating?this:Vector2.zero)},Vector2.prototype.rotateDeg=function(deg){return rotate(this,deg*DEG2RAD,this.isMutating?this:Vector2.zero)},Vector2.prototype.rotate90=function(){return v=this,target=this.isMutating?this:Vector2.zero,x=v[0],target[0]=-v[1],target[1]=x,target;var v,target,x},Vector2.prototype.rotate180=function(){return v=this,(target=this.isMutating?this:Vector2.zero)[0]=-v[0],target[1]=-v[1],target;var v,target},Vector2.prototype.rotate270=function(){return v=this,target=this.isMutating?this:Vector2.zero,x=v[0],target[0]=v[1],target[1]=-x,target;var v,target,x},Vector2.prototype.normalize=function(){return normalize(this)},Vector2.prototype.normalized=function(){return normalize(this,Vector2.zero)},Vector2.distance=function(a,b){return function(a,b){for(var sq=0,i=0;i<a.length;i++)sq+=Math.pow(b[i]-a[i],2);return 0===sq?sq:Math.sqrt(sq)}(a,b)},Vector2.dot=function(a,b){return function(a,b){for(var sum=0,i=0;i<a.length;i++)sum+=a[i]*b[i];return sum}(a,b)},Vector2.cross=function(a,b){return function(a,b){return a[0]*b[1]-a[1]*b[0]}(a,b)},Vector2.angleRight=function(v){return angleRight(v)},Vector2.angleRightDeg=function(v){return angleRight(v)*RAD2DEG},Vector2.angle=function(a,b){return Math.abs(signedAngle(a,b))},Vector2.angleDeg=function(a,b){return Math.abs(signedAngle(a,b))*RAD2DEG},Vector2.signedAngle=function(a,b){return signedAngle(a,b)},Vector2.signedAngleDeg=function(a,b){return signedAngle(a,b)*RAD2DEG},Vector2.lerp=function(a,b,t){return function(a,b,t,target){void 0===target&&(target=a);for(var n=function(value,min=0,max=1){return value<min?min:value>max?max:value}(t,0,1),m=1-n,i=0;i<a.length;i++)target[i]=a[i]*m+b[i]*n;return target}(new Vector2(a),b,t)},Vector2.lerpRot=function(a,b,t){return function(a,b,n,target){return void 0===target&&(target=a),rotate(a,n*signedAngle(a,b),target)}(a,b,t,Vector2.zero)},Vector2.prototype.clone=function(){return new Vector2(this[0],this[1])},Vector2.equals=function(a,b,epsilon){return void 0===epsilon&&(epsilon=0),!(Math.abs(a[0]-b[0])>epsilon)&&!(Math.abs(a[1]-b[1])>epsilon)},Vector2.prototype.equals=function(vector,epsilon){return void 0===epsilon&&(epsilon=0),Vector2.equals(this,vector,epsilon)},Vector2.isZeroVector=function(vector,epsilon){return void 0===epsilon&&(epsilon=0),isZeroVector(vector,epsilon)},Vector2.prototype.isZeroVector=function(epsilon){return void 0===epsilon&&(epsilon=0),isZeroVector(this,epsilon)},Vector2.prototype.toArray=function(){return[this[0],this[1]]},Vector2.prototype.modify=function(modifier){return function(a,modifier,target){void 0===target&&(target=a);for(var i=0;i<a.length;i++)target[i]=modifier(a[i],i);return target}(this,modifier)},Vector2.prototype[Symbol.iterator]=function(){var _this=this,i=0;return{next:function(){switch(i++){case 0:return{value:_this[0],done:!1};case 1:return{value:_this[1],done:!1};default:return{value:-1,done:!0}}}}},Object.defineProperty(Vector2,"zero",{get:function(){return new Vector2(0,0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"one",{get:function(){return new Vector2(1,1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"positiveInfinity",{get:function(){return new Vector2(1/0,1/0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"negativeInfinity",{get:function(){return new Vector2(-1/0,-1/0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"up",{get:function(){return new Vector2(0,1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"right",{get:function(){return new Vector2(1,0)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"down",{get:function(){return new Vector2(0,-1)},enumerable:!1,configurable:!0}),Object.defineProperty(Vector2,"left",{get:function(){return new Vector2(-1,0)},enumerable:!1,configurable:!0}),Vector2}();return Vector2}));