From c184f02fb925b5af7a80d941101f8b3b2b9586f3 Mon Sep 17 00:00:00 2001 From: Kevin Scroggins Date: Sat, 10 Feb 2018 15:42:22 -0500 Subject: [PATCH] Initial version of extended math helper functions and constant values --- .gitignore | 11 ++++++ .npmignore | 9 +++++ README.md | 28 ++++++++++++++ dist/extended-math.js | 89 +++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 21 ++++++++++ package.json | 29 ++++++++++++++ src/extended-math.js | 79 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 266 insertions(+) create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 README.md create mode 100644 dist/extended-math.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/extended-math.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..596901b --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +node_modules +bower_components +coverage +.sass-cache +yarn.lock +npm-debug.log +yarn-error.log +Thumbs.db +desktop.ini +.DS_Store +!.gitkeep diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..4410db6 --- /dev/null +++ b/.npmignore @@ -0,0 +1,9 @@ +node_modules +bower_components +src +test +coverage +.sass-cache +package-lock.json +yarn.lock +gulpfile.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a0bf9f --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Extended Math + +A collection mathemtatical helper functions and constant values. + +## Client-Side Usage + +```html + + + +``` + +## Server-Side Usage + +```javascript +const extendedMath = require("extended-math"); + +extendedMath.clamp(5, 0, 2); // => 2 +``` + +## Installation + +To install this module: +```bash +npm install extended-math +``` diff --git a/dist/extended-math.js b/dist/extended-math.js new file mode 100644 index 0000000..edd6384 --- /dev/null +++ b/dist/extended-math.js @@ -0,0 +1,89 @@ +(function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : + typeof define === "function" && define.amd ? define(factory) : + (global.extendedMath = factory()); +} (this, function() { + + "use strict"; + + if(typeof require !== "undefined") { + if(typeof utilities === "undefined") { + global.utilities = require("extra-utilities"); + } + } + + let extendedMath = { }; + + extendedMath.HalfPI = 1.57079632679489661923; + extendedMath.QuarterPI = 0.78539816339744830962; + extendedMath.TwoPI = 6.28318530717958647693; + + extendedMath.clamp = function(value, min, max) { + return utilities.isInvalidNumber(value) || utilities.isInvalidNumber(min) || utilities.isInvalidNumber(max) ? NaN : value < min ? min : value > max ? max : value; + }; + + extendedMath.distance = function(a, b) { + return utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b) ? NaN : Math.abs(b - a); + }; + + extendedMath.radiansToDegrees = function(value) { + return utilities.isInvalidNumber(value) ? NaN : value * (180 / Math.PI); + }; + + extendedMath.degreesToRadians = function(value) { + return utilities.isInvalidNumber(value) ? NaN : value * (Math.PI / 180); + }; + + extendedMath.compareAnglesDegrees = function(a, b) { + if(utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b)) { + return NaN; + } + + if(a == b) { + return 0; + } + + let c = a % 360; + let d = b % 360; + + if(c < 0) { + c += 360; + } + + if(d < 0) { + d += 360; + } + + if(c === d) { + return 0; + } + + return Math.cos(extendedMath.degreesToRadians(a - b) + (Math.PI / 2)) < 0 ? -1 : 1; + }; + + extendedMath.compareAnglesRadians = function(a, b) { + return utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b) ? NaN : extendedMath.compareAnglesDegrees(extendedMath.radiansToDegrees(a), extendedMath.radiansToDegrees(b)); + }; + + extendedMath.lerp = function(a, b, amount) { + if(utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b) || utilities.isInvalidNumber(amount)) { + return NaN; + } + + if(amount === 0) { + return a; + } + else if(amount === 1) { + return b; + } + + return a + (b - a) * amount; + }; + + extendedMath.normalize = function(value, min, max) { + return utilities.isInvalidNumber(value) || utilities.isInvalidNumber(min) || utilities.isInvalidNumber(max) ? NaN : (value - min) / (max - min); + }; + + return extendedMath; + +})); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0d0064f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,21 @@ +{ + "name": "extended-math", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "extra-utilities": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/extra-utilities/-/extra-utilities-1.1.0.tgz", + "integrity": "sha512-ulnmJviyg2mwqpRsjX1BOy2LK/UHJFkAs49bA3fH6Vg5/rJgqU357ytJKVBRSwWUOHXoZQrt+OrWMQCnyCn4Qw==", + "requires": { + "validator": "9.4.0" + } + }, + "validator": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.0.tgz", + "integrity": "sha512-ftkCYp/7HrGdybVCuwSje07POAd93ksZJpb5GVDBzm8SLKIm3QMJcZugb5dOJsONBoWhIXl0jtoGHTyou3DAgA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b15266d --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "extended-math", + "version": "1.0.0", + "description": "A collection mathemtatical helper functions and constant values.", + "main": "dist/extended-math.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/nitro404/extended-math.git" + }, + "keywords": [ + "extended", + "math", + "helper", + "functions", + "constants" + ], + "author": "Kevin Scroggins", + "license": "ISC", + "bugs": { + "url": "https://github.com/nitro404/extended-math/issues" + }, + "homepage": "https://github.com/nitro404/extended-math#readme", + "dependencies": { + "extra-utilities": "^1.1.0" + } +} diff --git a/src/extended-math.js b/src/extended-math.js new file mode 100644 index 0000000..450f100 --- /dev/null +++ b/src/extended-math.js @@ -0,0 +1,79 @@ +if(typeof require !== "undefined") { + if(typeof utilities === "undefined") { + global.utilities = require("extra-utilities"); + } +} + +let extendedMath = { }; + +extendedMath.HalfPI = 1.57079632679489661923; +extendedMath.QuarterPI = 0.78539816339744830962; +extendedMath.TwoPI = 6.28318530717958647693; + +extendedMath.clamp = function(value, min, max) { + return utilities.isInvalidNumber(value) || utilities.isInvalidNumber(min) || utilities.isInvalidNumber(max) ? NaN : value < min ? min : value > max ? max : value; +}; + +extendedMath.distance = function(a, b) { + return utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b) ? NaN : Math.abs(b - a); +}; + +extendedMath.radiansToDegrees = function(value) { + return utilities.isInvalidNumber(value) ? NaN : value * (180 / Math.PI); +}; + +extendedMath.degreesToRadians = function(value) { + return utilities.isInvalidNumber(value) ? NaN : value * (Math.PI / 180); +}; + +extendedMath.compareAnglesDegrees = function(a, b) { + if(utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b)) { + return NaN; + } + + if(a == b) { + return 0; + } + + let c = a % 360; + let d = b % 360; + + if(c < 0) { + c += 360; + } + + if(d < 0) { + d += 360; + } + + if(c === d) { + return 0; + } + + return Math.cos(extendedMath.degreesToRadians(a - b) + (Math.PI / 2)) < 0 ? -1 : 1; +}; + +extendedMath.compareAnglesRadians = function(a, b) { + return utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b) ? NaN : extendedMath.compareAnglesDegrees(extendedMath.radiansToDegrees(a), extendedMath.radiansToDegrees(b)); +}; + +extendedMath.lerp = function(a, b, amount) { + if(utilities.isInvalidNumber(a) || utilities.isInvalidNumber(b) || utilities.isInvalidNumber(amount)) { + return NaN; + } + + if(amount === 0) { + return a; + } + else if(amount === 1) { + return b; + } + + return a + (b - a) * amount; +}; + +extendedMath.normalize = function(value, min, max) { + return utilities.isInvalidNumber(value) || utilities.isInvalidNumber(min) || utilities.isInvalidNumber(max) ? NaN : (value - min) / (max - min); +}; + +return extendedMath;