Refactor: Implement SmartCube renderer, improve UI styling, and fix gaps
This commit is contained in:
57
node_modules/matrix-js/lib/rational.js
generated
vendored
Normal file
57
node_modules/matrix-js/lib/rational.js
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Constructs an object storing rational numbers and methods performing operations
|
||||
*
|
||||
* @param num numerator of the rational number
|
||||
* @param den denomenator of the rational number
|
||||
* @returns Object storing the rational number and method doing arthmetic operations
|
||||
*/
|
||||
function rational(num, den) {
|
||||
den = den || 1;
|
||||
if (Math.sign(den) === -1) {
|
||||
num = -num;
|
||||
den = -den;
|
||||
}
|
||||
return {
|
||||
num: num,
|
||||
den: den,
|
||||
add: (op) => rational(num * op.den + den * op.num, den * op.den),
|
||||
sub: (op) => rational(num * op.den - den * op.num, den * op.den),
|
||||
mul: (op) => multiply(op, num, den),
|
||||
div: (op) => {
|
||||
let _num = op.den;
|
||||
let _den = op.num;
|
||||
return multiply(rational(_num, _den), num, den);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = rational;
|
||||
|
||||
/**
|
||||
* Multiplies two rational number based on multiplication rules that cancels common terms
|
||||
*
|
||||
* @param op the second operand
|
||||
* @param num numerator of first operand
|
||||
* @param den denominator of second operand
|
||||
* @returns another rational number
|
||||
*/
|
||||
function multiply(op, num, den) {
|
||||
let _num = Math.sign(num) * Math.sign(op.num);
|
||||
let _den = Math.sign(den) * Math.sign(op.den);
|
||||
if (Math.abs(num) === Math.abs(op.den) && Math.abs(den) === Math.abs(op.num)) {
|
||||
_num = _num;
|
||||
_den = _den;
|
||||
} else if (Math.abs(den) === Math.abs(op.num)) {
|
||||
_num = _num * Math.abs(num);
|
||||
_den = _den * Math.abs(op.den);
|
||||
} else if (Math.abs(num) === Math.abs(op.den)) {
|
||||
_num = _num * Math.abs(op.num);
|
||||
_den = _den * Math.abs(den);
|
||||
} else {
|
||||
_num = num * op.num;
|
||||
_den = den * op.den;
|
||||
}
|
||||
return rational(_num, _den);
|
||||
}
|
||||
Reference in New Issue
Block a user