UNPKG

@equinor/videx-vector2

Version:

Vector2 class library written in javascript.

2 lines (1 loc) 6.53 kB
import{add,sub,scale,magnitude,normalize,dist,dot,mix,isZeroVector,modify}from"@equinor/videx-linear-algebra";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){var len=magnitude(this);scale(this,val/len,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){var output=new Vector2(a);return add(output,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){var output=new Vector2(a);return sub(output,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){var output=new Vector2(v);return scale(output,1/n)},Vector2.multiply=function(v,n){var output=new Vector2(v);return scale(output,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 dist(a,b)},Vector2.dot=function(a,b){return dot(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){var output=new Vector2(a);return mix(output,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 modify(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}();export{Vector2 as default};