vector2d-extended
Version:
112 lines (108 loc) • 17.5 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["Vector2d"] = factory();
else
root["Vector2d"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/Vector2d.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/Vector2d.ts":
/*!*************************!*\
!*** ./src/Vector2d.ts ***!
\*************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction toFixed(number) {\n var fixed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var fix = Math.pow(10, fixed);\n return Math.floor(number * fix) / fix;\n}\n\nvar Vector2d =\n/*#__PURE__*/\nfunction () {\n function Vector2d() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n _classCallCheck(this, Vector2d);\n\n this.x = x;\n this.y = y;\n }\n\n _createClass(Vector2d, [{\n key: \"toString\",\n value: function toString() {\n return '{x:' + this.x + ',y:' + this.y + '}';\n }\n }, {\n key: \"set\",\n // Methods\n // Returns Vector2d\n value: function set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n }, {\n key: \"add\",\n value: function add(a) {\n return this.addX(a).addY(a);\n }\n }, {\n key: \"addX\",\n value: function addX(a) {\n this.x += a.x;\n return this;\n }\n }, {\n key: \"addY\",\n value: function addY(a) {\n this.y += a.y;\n return this;\n }\n }, {\n key: \"subtract\",\n value: function subtract(a) {\n return this.subtractX(a).subtractY(a);\n }\n }, {\n key: \"subtractX\",\n value: function subtractX(a) {\n this.x -= a.x;\n return this;\n }\n }, {\n key: \"subtractY\",\n value: function subtractY(a) {\n this.y -= a.y;\n return this;\n }\n }, {\n key: \"multiply\",\n value: function multiply(a) {\n return this.multiplyX(a).multiplyY(a);\n }\n }, {\n key: \"multiplyX\",\n value: function multiplyX(a) {\n this.x *= a;\n return this;\n }\n }, {\n key: \"multiplyY\",\n value: function multiplyY(a) {\n this.y *= a;\n return this;\n }\n }, {\n key: \"divide\",\n value: function divide(a) {\n return this.divideX(a).divideY(a);\n }\n }, {\n key: \"divideX\",\n value: function divideX(a) {\n this.x /= a;\n return this;\n }\n }, {\n key: \"divideY\",\n value: function divideY(a) {\n this.y /= a;\n return this;\n }\n }, {\n key: \"normalize\",\n value: function normalize() {\n this.magnitude = 1;\n return this;\n }\n }, {\n key: \"project\",\n value: function project(b) {\n var c = this.dot(b) / b.magnitudeSquared;\n return this.equate(b).multiply(c);\n }\n }, {\n key: \"round\",\n value: function round() {\n return this.roundX().roundY();\n }\n }, {\n key: \"roundX\",\n value: function roundX() {\n this.x = Math.round(this.x);\n return this;\n }\n }, {\n key: \"roundY\",\n value: function roundY() {\n this.y = Math.round(this.y);\n return this;\n }\n }, {\n key: \"zero\",\n value: function zero() {\n return this.zeroX().zeroY();\n }\n }, {\n key: \"zeroX\",\n value: function zeroX() {\n this.x = 0;\n return this;\n }\n }, {\n key: \"zeroY\",\n value: function zeroY() {\n this.y = 0;\n return this;\n }\n }, {\n key: \"clone\",\n value: function clone() {\n return new Vector2d(this.x, this.y);\n }\n }, {\n key: \"equate\",\n value: function equate(b) {\n return this.equateX(b).equateY(b);\n }\n }, {\n key: \"equateX\",\n value: function equateX(b) {\n this.x = b.x;\n return this;\n }\n }, {\n key: \"equateY\",\n value: function equateY(b) {\n this.y = b.y;\n return this;\n }\n }, {\n key: \"invert\",\n value: function invert() {\n return this.invertX().invertY();\n }\n }, {\n key: \"invertX\",\n value: function invertX() {\n this.x = -this.x;\n return this;\n }\n }, {\n key: \"invertY\",\n value: function invertY() {\n this.y = -this.y;\n return this;\n }\n }, {\n key: \"lerp\",\n value: function lerp(b, l) {\n if (l < 0) {\n l = 0;\n } else if (l > 1) {\n l = 1;\n }\n\n return this.set(this.x + (b.x - this.x) * l, this.y + (b.y - this.y) * l);\n }\n }, {\n key: \"scale\",\n value: function scale(a) {\n return this.scaleX(a).scaleY(a);\n }\n }, {\n key: \"scaleX\",\n value: function scaleX(a) {\n this.x *= a.x;\n return this;\n }\n }, {\n key: \"scaleY\",\n value: function scaleY(a) {\n this.y *= a.y;\n return this;\n }\n }, {\n key: \"clampMagnitude\",\n value: function clampMagnitude(maxLength) {\n if (this.magnitudeSquared > maxLength * maxLength) {\n this.magnitude = maxLength;\n }\n\n return this;\n } // Returns number\n\n }, {\n key: \"dot\",\n value: function dot(b) {\n return this.x * b.x + this.y * b.y;\n }\n }, {\n key: \"cross\",\n value: function cross(b) {\n return this.x * b.y - this.y * b.x;\n }\n }, {\n key: \"distance\",\n value: function distance(b) {\n return Math.sqrt(this.distanceSquared(b));\n }\n }, {\n key: \"distanceSquared\",\n value: function distanceSquared(b) {\n var dx = this.x - b.x;\n var dy = this.y - b.y;\n return dx * dx + dy * dy;\n }\n }, {\n key: \"angle\",\n value: function angle(b) {\n var aMagnitude = this.magnitude;\n var bMagnitude = b.magnitude;\n var dot = this.x / aMagnitude * (b.x / bMagnitude) + this.y / aMagnitude * (b.y / bMagnitude);\n\n if (dot < -1) {\n dot = -1;\n } else if (dot > 1) {\n dot = 1;\n }\n\n return Math.acos(dot);\n }\n }, {\n key: \"areaTriangle\",\n value: function areaTriangle(b) {\n return this.areaParallelogram(b) / 2;\n }\n }, {\n key: \"areaParallelogram\",\n value: function areaParallelogram(b) {\n return Math.abs(this.cross(b));\n } // Returns boolean\n\n }, {\n key: \"isZero\",\n value: function isZero() {\n return this.isZeroX() && this.isZeroY();\n }\n }, {\n key: \"isZeroX\",\n value: function isZeroX() {\n return this.x === 0;\n }\n }, {\n key: \"isZeroY\",\n value: function isZeroY() {\n return this.y === 0;\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(b) {\n return this.isEqualX(b) && this.isEqualY(b);\n }\n }, {\n key: \"isEqualX\",\n value: function isEqualX(b) {\n return this.x === b.x;\n }\n }, {\n key: \"isEqualY\",\n value: function isEqualY(b) {\n return this.y === b.y;\n }\n }, {\n key: \"isNaN\",\n value: function isNaN() {\n return this.isNaNX() || this.isNaNY();\n }\n }, {\n key: \"isNaNX\",\n value: function isNaNX() {\n return isNaN(this.x);\n }\n }, {\n key: \"isNaNY\",\n value: function isNaNY() {\n return isNaN(this.y);\n }\n }, {\n key: \"isFinite\",\n value: function isFinite() {\n return this.isFiniteX() || this.isFiniteY();\n }\n }, {\n key: \"isFiniteX\",\n value: function isFiniteX() {\n return isFinite(this.x);\n }\n }, {\n key: \"isFiniteY\",\n value: function isFiniteY() {\n return isFinite(this.y);\n }\n }, {\n key: \"isEqualRotate\",\n value: function isEqualRotate(b) {\n return toFixed(this.rotate, 2) === toFixed(b.rotate, 2);\n }\n }, {\n key: \"isEqualInvertRotate\",\n value: function isEqualInvertRotate(b) {\n var ref = Math.abs(toFixed(this.rotate, 6) - toFixed(b.rotate, 6));\n return 3.14158 < ref && ref < 3.14160;\n }\n }, {\n key: \"isCollinear\",\n value: function isCollinear(b) {\n if (this.isZeroX() || this.isZeroY() || b.isZeroX() || b.isZeroY()) {\n var an = this.isZeroX() && !this.isZeroY() ? this.y : this.x;\n var bn = b.isZeroX() && !b.isZeroY() ? b.y : b.x;\n var n = bn / an;\n var nax = this.x * n;\n var nay = this.y * n;\n return b.x === nax && b.y === nay;\n }\n\n return this.x / b.x === this.y / b.y;\n }\n }, {\n key: \"isOrthogonal\",\n value: function isOrthogonal(b) {\n return this.dot(b) === 0;\n }\n }, {\n key: \"rotate\",\n get: function get() {\n return Math.atan2(this.y, this.x);\n },\n set: function set(dir) {\n var len = this.magnitude;\n var x = Math.cos(dir) * len;\n var y = Math.sin(dir) * len;\n this.set(toFixed(x, 10), toFixed(y, 10));\n }\n }, {\n key: \"magnitudeSquared\",\n get: function get() {\n return this.dot(this);\n },\n set: function set(value) {\n this.magnitude = Math.sqrt(value);\n }\n }, {\n key: \"magnitude\",\n get: function get() {\n return Math.sqrt(this.magnitudeSquared);\n },\n set: function set(value) {\n var magnitude = this.magnitude;\n this.divide(magnitude).multiply(value);\n }\n }], [{\n key: \"clampMagnitude\",\n value: function clampMagnitude(a, maxLength) {\n return a.clone().clampMagnitude(maxLength);\n }\n }, {\n key: \"lerp\",\n value: function lerp(a, b, l) {\n return a.clone().lerp(b, l);\n }\n }, {\n key: \"scale\",\n value: function scale(a, b) {\n return a.clone().scaleX(b).scaleY(b);\n }\n }, {\n key: \"scaleX\",\n value: function scaleX(a, b) {\n return new Vector2d(a.x, 0).scaleX(b);\n }\n }, {\n key: \"scaleY\",\n value: function scaleY(a, b) {\n return new Vector2d(0, a.y).scaleY(b);\n }\n }, {\n key: \"add\",\n value: function add(a, b) {\n return a.clone().addX(b).addY(b);\n }\n }, {\n key: \"addX\",\n value: function addX(a, b) {\n return new Vector2d(a.x, 0).addX(b);\n }\n }, {\n key: \"addY\",\n value: function addY(a, b) {\n return new Vector2d(0, a.y).addY(b);\n }\n }, {\n key: \"subtract\",\n value: function subtract(a, b) {\n return a.clone().subtractX(b).subtractY(b);\n }\n }, {\n key: \"subtractX\",\n value: function subtractX(a, b) {\n return new Vector2d(a.x, 0).subtractX(b);\n }\n }, {\n key: \"subtractY\",\n value: function subtractY(a, b) {\n return new Vector2d(0, a.y).subtractY(b);\n }\n }, {\n key: \"multiply\",\n value: function multiply(a, b) {\n return a.clone().multiplyX(b).multiplyY(b);\n }\n }, {\n key: \"multiplyX\",\n value: function multiplyX(a, b) {\n return a.clone().multiplyX(b);\n }\n }, {\n key: \"multiplyY\",\n value: function multiplyY(a, b) {\n return a.clone().multiplyY(b);\n }\n }, {\n key: \"divide\",\n value: function divide(a, b) {\n return a.clone().divideX(b).divideY(b);\n }\n }, {\n key: \"divideX\",\n value: function divideX(a, b) {\n return a.clone().divideX(b);\n }\n }, {\n key: \"divideY\",\n value: function divideY(a, b) {\n return a.clone().divideY(b);\n }\n }, {\n key: \"normalize\",\n value: function normalize(a) {\n return a.clone().normalize();\n }\n }, {\n key: \"project\",\n value: function project(a, b) {\n return a.clone().project(b);\n }\n }, {\n key: \"round\",\n value: function round(a) {\n return a.clone().round();\n }\n }, {\n key: \"roundX\",\n value: function roundX(a) {\n return a.clone().roundX();\n }\n }, {\n key: \"roundY\",\n value: function roundY(a) {\n return a.clone().roundY();\n }\n }, {\n key: \"invert\",\n value: function invert(a) {\n return a.clone().invert();\n }\n }, {\n key: \"invertX\",\n value: function invertX(a) {\n return a.clone().invertX();\n }\n }, {\n key: \"invertY\",\n value: function invertY(a) {\n return a.clone().invertY();\n }\n }, {\n key: \"ZERO\",\n get: function get() {\n return new Vector2d();\n }\n }, {\n key: \"ONE\",\n get: function get() {\n return new Vector2d(1, 1);\n }\n }, {\n key: \"UP\",\n get: function get() {\n return new Vector2d(0, -1);\n }\n }, {\n key: \"DOWN\",\n get: function get() {\n return new Vector2d(0, 1);\n }\n }, {\n key: \"RIGHT\",\n get: function get() {\n return new Vector2d(1, 0);\n }\n }, {\n key: \"LEFT\",\n get: function get() {\n return new Vector2d(-1, 0);\n }\n }]);\n\n return Vector2d;\n}();\n\n;\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vector2d);\n\n//# sourceURL=webpack://Vector2d/./src/Vector2d.ts?");
/***/ })
/******/ })["default"];
});