@js-basics/vector
Version:
A 3D Vector lib including arithmetic operator overloading (+ - * / % **).
78 lines (75 loc) • 1.63 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.IDegree = exports.Degree = void 0;
exports.degree = degree;
exports.idegree = idegree;
exports.isAngle = isAngle;
var _math = require("./utils/math.cjs");
var _css = require("./utils/css.cjs");
const ANGLE = Symbol('angle rad');
const DEG_TO_RAD = Math.PI / 180;
class ADegree {
constructor(angle) {
if (angle instanceof ADegree) {
this[ANGLE] = angle[ANGLE];
} else {
this[ANGLE] = (0, _math.normRad)(angle * DEG_TO_RAD);
}
}
valueOf() {
return this[ANGLE];
}
toJSON() {
return {
angle: this[ANGLE]
};
}
toString() {
return JSON.stringify(this.toJSON());
}
toCSSVars(name, target) {
return (0, _css.convertToCSSVars)(name, this.toJSON(), target);
}
}
class Degree extends ADegree {
set(angle) {
if (angle instanceof ADegree) {
this[ANGLE] = angle[ANGLE];
} else {
this[ANGLE] = (0, _math.normRad)((angle || 0) * DEG_TO_RAD);
}
}
}
exports.Degree = Degree;
class IDegree extends ADegree {
toDegree() {
return new Degree(this[ANGLE]);
}
}
exports.IDegree = IDegree;
const ZERO = new IDegree(0);
/**
* @param {number | ADegree} angle
* @returns {Degree & number}
*/
function degree(angle) {
return new Degree(angle);
}
/**
* @param {number | ADegree} angle
* @returns {IDegree & number}
*/
function idegree(angle) {
if (angle instanceof IDegree) {
return angle;
}
if (!angle) {
return ZERO;
}
return new IDegree(angle);
}
function isAngle(angle) {
return (0, _math.isNumber)(angle) || angle instanceof ADegree;
}
;