linear-conversion

5.0.0 • Public • Published

linear-conversion

Build Status Coverage Status Code Climate

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

Package Sidebar

Install

npm i linear-conversion

Weekly Downloads

15

Version

5.0.0

License

MIT

Last publish

Collaborators

  • javiercejudo