Package Exports
- linear-conversion
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (linear-conversion) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
linear-conversion
Linear conversion class for linear-converter
Install
npm i linear-conversion
Basic usage
var Decimal = require('linear-arbitrary-precision')(require('floating-adapter'));
var lc = require('linear-converter')(Decimal);
var LinearConversion = require('linear-conversion')(lc);
// using linear-presets@1.x
var temp = require('linear-presets').PRESETS.temperature;
var celsiusToFahrenheit = new LinearConversion(temp.celsiusToFahrenheit);
celsiusToFahrenheit.convert(25); // => new Decimal('77')
See CodePen example for a quick interactive intro.
A simpler (although less flexible) setup is possible using linear-converter-to-go:
var lc = require('linear-converter-to-go');
var LinearConversion = require('linear-conversion')(lc);
// notice that in this case, the presets for common units are bundled
// linear-presets@3.x or higher
var temp = lc.PRESETS.temperature;
Conversion inversion
var fahrenheitToCelsius = celsiusToFahrenheit.invert();
fahrenheitToCelsius.convert(77); // => 25 (as decimal)
Conversion composition
var celsiusToKelvin = new LinearConversion(temp.celsiusToKelvin);
var kelvinToFahrenheit = celsiusToKelvin.invert().compose(celsiusToFahrenheit);
kelvinToFahrenheit.convert(293.15); // => 68 (as decimal)
Custom conversions
Custom conversions are achieved by passing an array with 2 scales, each of those an array with 2 values. For example, [[0, 1], [0, 2]] means that 0 and 1 in the first scale map to 0 and 2 in the second scale respectively; in short, it multiplies by 2. Any linear conversion can be described that way:
// f(x) = ax + b
(new LinearConversion([[0, 1], [b, a+b]])).convert(x); // => ax + b
(new LinearConversion([[1/a, -b/a], [b+1, 0]])).convert(x); // => ax + b
For an arbitrary f(x) = ax + b, any [[x1, x2], [f(x1), f(x2)]] is a valid preset.
More examples:
// degrees to radians
(new LinearConversion([[0, 180], [0, Math.PI]])).convert(240); // => 4 * Math.PI / 3
// f(x) = 3x
(new LinearConversion([[0, 1/3], [0, 1]])).convert(5); // => 15
// f(x) = -2x - 46
(new LinearConversion([[0, 1], [-46, -48]])).convert(-23); // => 0
Coefficients
// f(x) = 2x + 1
var doublePlus1 = new LinearConversion([[0, 1], [1, 3]]);
doublePlus1.getCoefficientA(); // => 2
doublePlus1.getCoefficientB(); // => 1
// f(x) = ax + b
var timesAPlusB = new LinearConversion([[x1, x2], [f(x1), f(x2)]]);
timesAPlusB.getCoefficientA(); // => a
timesAPlusB.getCoefficientB(); // => b
Preset equivalence
var eq = new LinearConversion([[1, 5], [3, -9]]);
eq.equates(new LinearConversion([[-1, 100], [9, -294]])); // => true (both f(x) = -3x + 6)
var notEq = new LinearConversion([[0, 1], [0, 2]]); // f(x) = 2x
notEq.equates(new LinearConversion([[0, 1], [0, 3]])); // => false (new one is f(x) = 3x)
Arbitrary precision
Arbitrary precision support is provided via linear-arbitrary-precision. See all available adapters.
var doublePlusPoint1 = new LinearConversion([[0, 0.1], [0.1, 0.3]]);
// without arbitrary precision adapters
doublePlusPoint1.getCoefficientA(); // => 1.9999999999999998
// with arbitrary precision adapters
doublePlusPoint1.getCoefficientA(); // => 2
See CodePen example.
See more
Related projects
- linear-converter: flexible linear converter with built in conversions for common units.
- rescale: rescales a point given two scales.
- scale: scales normalised data.
- normalise: normalise data to [0, 1].
- rescale-util: rescale utilities.