mirror of
https://github.com/locomotivemtl/locomotive-boilerplate.git
synced 2026-01-15 00:55:08 +08:00
137 lines
2.9 KiB
SCSS
137 lines
2.9 KiB
SCSS
// ==========================================================================
|
|
// Tools / Maths
|
|
// ==========================================================================
|
|
|
|
// Removes the unit from the given number.
|
|
//
|
|
// @param {number} $number The number to strip.
|
|
// @return {number}
|
|
|
|
@function strip-units($number) {
|
|
@return math.div($number, ($number * 0 + 1));
|
|
}
|
|
|
|
// Returns the square root of the given number.
|
|
//
|
|
// @param {number} $number The number to calculate.
|
|
// @return {number}
|
|
|
|
@function sqrt($number) {
|
|
$x: 1;
|
|
$value: $x;
|
|
|
|
@for $i from 1 through 10 {
|
|
$value: $x - math.div(($x * $x - abs($number)), (2 * $x));
|
|
$x: $value;
|
|
}
|
|
|
|
@return $value;
|
|
}
|
|
|
|
// Returns a number raised to the power of an exponent.
|
|
//
|
|
// @param {number} $number The base number.
|
|
// @param {number} $exp The exponent.
|
|
// @return {number}
|
|
|
|
@function pow($number, $exp) {
|
|
$value: 1;
|
|
|
|
@if $exp > 0 {
|
|
@for $i from 1 through $exp {
|
|
$value: $value * $number;
|
|
}
|
|
} @else if $exp < 0 {
|
|
@for $i from 1 through -$exp {
|
|
$value: math.div($value, $number);
|
|
}
|
|
}
|
|
|
|
@return $value;
|
|
}
|
|
|
|
// Returns the factorial of the given number.
|
|
//
|
|
// @param {number} $number The number to calculate.
|
|
// @return {number}
|
|
|
|
@function fact($number) {
|
|
$value: 1;
|
|
|
|
@if $number > 0 {
|
|
@for $i from 1 through $number {
|
|
$value: $value * $i;
|
|
}
|
|
}
|
|
|
|
@return $value;
|
|
}
|
|
|
|
// Returns an approximation of pi, with 11 decimals.
|
|
//
|
|
// @return {number}
|
|
|
|
@function pi() {
|
|
@return 3.14159265359;
|
|
}
|
|
|
|
// Converts the number in degrees to the radian equivalent .
|
|
//
|
|
// @param {number} $angle The angular value to calculate.
|
|
// @return {number} If $angle has the `deg` unit,
|
|
// the radian equivalent is returned.
|
|
// Otherwise, the unitless value of $angle is returned.
|
|
|
|
@function rad($angle) {
|
|
$unit: unit($angle);
|
|
$angle: strip-units($angle);
|
|
|
|
// If the angle has `deg` as unit, convert to radians.
|
|
@if ($unit == deg) {
|
|
@return math.div($angle, 180) * pi();
|
|
}
|
|
|
|
@return $angle;
|
|
}
|
|
|
|
// Returns the sine of the given number.
|
|
//
|
|
// @param {number} $angle The angle to calculate.
|
|
// @return {number}
|
|
|
|
@function sin($angle) {
|
|
$sin: 0;
|
|
$angle: rad($angle);
|
|
|
|
@for $i from 0 through 10 {
|
|
$sin: $sin + pow(-1, $i) * math.div(pow($angle, (2 * $i + 1)), fact(2 * $i + 1));
|
|
}
|
|
|
|
@return $sin;
|
|
}
|
|
|
|
// Returns the cosine of the given number.
|
|
//
|
|
// @param {string} $angle The angle to calculate.
|
|
// @return {number}
|
|
|
|
@function cos($angle) {
|
|
$cos: 0;
|
|
$angle: rad($angle);
|
|
|
|
@for $i from 0 through 10 {
|
|
$cos: $cos + pow(-1, $i) * math.div(pow($angle, 2 * $i), fact(2 * $i));
|
|
}
|
|
|
|
@return $cos;
|
|
}
|
|
|
|
// Returns the tangent of the given number.
|
|
//
|
|
// @param {string} $angle The angle to calculate.
|
|
// @return {number}
|
|
|
|
@function tan($angle) {
|
|
@return math.div(sin($angle), cos($angle));
|
|
}
|