๐Ÿงฎ Math#

#bs.math:help

The beatifull world of mathematicsโ€ฆ in Minecraft!

Watch a demo

โ€œMathematics has very subtle inventions that can be of great service, both to satisfy the curious and to facilitate all arts and reduce the labor of men.โ€

โ€”Renรฉ Descartes


๐Ÿ”ง Functions#

You can find below all the function available in this module.


Arccosine#

#bs.math:acos

Calculate the arccosinus of a value between -1 and 1.

Inputs
(score) $math.acos.value bs.in

The value you want to calculate the arccosine of, shifted by 3 digits (1,2345 -> 1234) for better precision in integer scores.

Output
(score) $math.acos bs.out

The result of the calculation, in degrees (shifted by 2 digits).

Example

Calculate and display the arccos of 0,42:

# Once
scoreboard players set $math.acos.value bs.in 420
function #bs.math:acos
tellraw @a [{"text":"acos(0.42) = ","color":"dark_gray"},{"score":{"name":"$math.acos","objective":"bs.out"},"color":"gold"}]

Credits: Aksiome, KubbyDev


Arcsine#

#bs.math:asin

Compute the arcsinus of a value between -1 and 1.

Inputs
(score) $math.asin.value bs.in

The value you want to calculate the arcsine of, shifted by 3 digits (1,2345 -> 1234) for better precision in integer scores.

Output
(score) $math.asin bs.out

The result of the calculation, in degrees (shifted by 2 digits).

Example

Calculate and display the arcsinus of 0.42:

# Once
scoreboard players set $math.asin.value bs.in 420
function #bs.math:asin
tellraw @a [{"text":"asin(0.42) = ","color":"dark_gray"},{"score":{"name":"$math.asin","objective":"bs.out"},"color":"gold"}]

Credits: Aksiome, KubbyDev


Arctangent#

#bs.math:atan

Compute the arctangent of a value between -infinite and +infinite.

Inputs
(score) $math.atan.value bs.in

The value you want to calculate the arctangent of, shifted by 3 digits (1,2345 -> 1234) for better precision in integer scores.

Output
(score) $math.atan bs.out

The result of the calculation, in degrees (shifted by 2 digits).

Example

Calculate and display the arctan of 0.42:

# Once
scoreboard players set $math.atan.value bs.in 420
function #bs.math:atan
tellraw @a [{"text":"atan(0.42) = ","color":"dark_gray"},{"score":{"name":"$math.atan","objective":"bs.out"},"color":"gold"}]

Credits: Aksiome, Leirof


Arctangent 2#

#bs.math:atan2

Compute the 2-argument arctangent of y and x.

Inputs
(scores) $math.atan2.[y,x] bs.in

The values you want to calculate the arctangent of, shifted by 3 digits (1,2345 -> 1234) for better precision in integer scores.

Output
(score) $math.atan2 bs.out

The result of the calculation, in degrees (shifted by 2 digits).

Example

Calculate and display the atan2 of (0.42, 0.8):

# Once
scoreboard players set $math.atan2.y bs.in 420
scoreboard players set $math.atan2.x bs.in 800
function #bs.math:atan2
tellraw @a [{"text":"atan2(0.42, 0.8) = ","color":"dark_gray"},{"score":{"name":"$math.atan2","objective":"bs.out"},"color":"gold"}]

Credits: Aksiome


Basis rotation 3D#

#bs.math:basis_rot_3d

Allows to obtain the equivalent of the vector passed in parameter in a base with a different orientation. Useful to convert an absolute/relative position into a local position for a given entity.

Inputs
(scores) $math.basis_rot_3d.[x,y,z] bs.in

Vector coordinates \((X,Y,Z)\) in the starting base (shifted by 3 digits).

(scores) $math.basis_rot_3d.[h,v] bs.in

Horizontal angle \(\phi\) (along \(\hat{y}\)) and vertical angle \(\theta\) (along \(\hat{\phi}\)) rotation (in degree) from the starting base (shifted by 2 digits).

Basis system

This system use the Minecraft coordinate system. Thus:

  • \(\hat{y}\) is the vertical axis.

  • \(\phi=0\) (starting point of the horizontal angle) is along the \(\hat{z}\) axis.

  • \(\theta=0\) (starting point of the vertical angle) is on the horizontal plane.

Outputs
(scores) $math.basis_rot_3d.[x,y,z] bs.out

Vector coordinates \((X',Y',Z')\) in the target base.

Examples

A block is in ~2 ~5 ~10 from me, I want to have this position in local coordinate (^? ^? ^?):

# One time

# Relative coordinates (we multiply by 1000 to have more precision on the result, which will also be multiplied by 1000)
scoreboard players set $math.basis_rot_3d.x bs.in 2000
scoreboard players set $math.basis_rot_3d.y bs.in 5000
scoreboard players set $math.basis_rot_3d.z bs.in 10000

# Difference between my rotation (= that of the coondata grid ^X ^Y ^Z) and the rotation of the Minecraft blocks grid (~X ~Y ~Z)
function #bs.position:get_rot {scale:100}
scoreboard players operation $math.basis_rot_3d.h bs.in = @s bs.rot.h
scoreboard players operation $math.basis_rot_3d.v bs.in = @s bs.rot.v

# Perform the basic rotation
function #bs.math:basis_rot_3d

# See the result
tellraw @a [{"text": "X = ", "color": "dark_gray"},{"score":{"name":"$math.basis_rot_3d.x", "objective": "bs.out"}, "color": "gold"},{"text":", Y = ", "color": "dark_gray"},{"score":{"name":"$math.basis_rot_3d.y", "objective": "bs.out"},"color":"gold"},{"text":", Z = ","color":"dark_gray"},{"score":{"name":"$math.basis_rot_3d.z","objective":"bs.out"},"color":"gold"}]

I want to have a vector pointing to where Iโ€™m looking, but in relative coordinates ~X ~Y ~Z (also called โ€œclassicalโ€ vector in this library)

# Once

# Retrieve a vector ^ ^ ^1 corresponding to a vector directed according to the orientation of the entity (we multiply by 1000 to have more precision on the result, which will also be multiplied by 1000)
scoreboard players set $math.basis_rot_3d.x bs.in 0
scoreboard players set $math.basis_rot_3d.y bs.in 0
scoreboard players set $math.basis_rot_3d.z bs.in 1000

# Get the orientation
function #bs.position:get_rot {scale:100}
scoreboard players operation $math.basis_rot_3d.h bs.in = @s bs.rot.h
scoreboard players operation $math.basis_rot_3d.v bs.in = @s bs.rot.v

# Reversal of the orientation since we want to have the relative orientation of the game grid compared to the orientation of the player (unlike the previous example)
scoreboard players operation $math.basis_rot_3d.h bs.in *= -1 bs.const
scoreboard players operation $math.basis_rot_3d.v bs.in *= -1 bs.const

# Perform the basic rotation
function #bs.math:basis_rot_3d

# See the result
tellraw @a [{"text": "X = ", "color": "dark_gray"},{"score":{"name":"$math.basis_rot_3d.x", "objective": "bs.out"}, "color": "gold"},{"text":", Y = ", "color": "dark_gray"},{"score":{"name":"$math.basis_rot_3d.y", "objective": "bs.out"},"color":"gold"},{"text":", Z = ","color":"dark_gray"},{"score":{"name":"$math.basis_rot_3d.z","objective":"bs.out"},"color":"gold"}]

Credits: Leirof


Cosine#

#bs.math:cos

Compute the cosine of an angle between 0 and 360.

Inputs
(score) $math.cos.angle bs.in

The angle in degrees shifted by 2 digits (ex: 90.15 -> 9015).

Outputs
(score) $math.cos bs.out

The cosine of the angle shifted by 3 digits (ex: 0.42 -> 420).

Example

Calculate and display the cosine of 42:

# Once
scoreboard players set $math.cos.angle bs.in 4200
function #bs.math:cos
tellraw @a [{"text": "cos(42) = ", "color": "dark_gray"},{"score":{"name":"$math.cos", "objective": "bs.out"}, "color": "gold"}]

Credits: Aksiome, Leirof


Sine#

#bs.math:sin

Computes the sine of an angle between 0 and 360.

Inputs
(score) $math.sin.angle bs.in

The angle in degrees shifted by 2 digits.

Outputs
(score) $math.sin bs.out

The sine of the angle shifted by 3 digits (ex: 0.42 -> 420).

Example

Calculate and display the sine of 42

# Once
scoreboard players set $math.sin.angle bs.in 4200
function #bs.math:sin
tellraw @a [{"text": "sin(42) = ", "color": "dark_gray"},{"score":{"name":"$math.sin", "objective": "bs.out"}, "color": "gold"}]

Credits: Aksiome, Leirof


Tangent#

#bs.math:tan

Compute the tangent of an angle between 0 and 360.

Inputs
(score) $math.tan.angle bs.in

The angle in degrees shifted by 2 digits.

Outputs
(score) $math.tan bs.out

The tangeant of the angle shifted by 3 digits (ex: 0.42 -> 420).

Example

Calculate and display the tengeante of 42:

# Once
scoreboard players set $math.tan.angle bs.in 4200
function #bs.math:tan
tellraw @a [{"text": "tan(42) = ", "color": "dark_gray"},{"score":{"name":"$math.tan", "objective": "bs.out"}, "color": "gold"}]

Credits: Leirof


Combine#

#bs.math:combine

Compute the combine of 2 numbers.

Technical limitation

The value of bs.out is incorrect if the result is greater than 2147483647 or $math.combine.[m,n] bs.in are not both positive.

Inputs
(scores) $math.combine.[m,n] bs.in

The numbers to be combined, the smaller input will be taken from the greater input.

Output
(score) $math.combine bs.out

The result of the operation.

Example

Calculate \(combine(4,2)\):

# Once
scoreboard players set $math.combine.m bs.in 4
scoreboard players set $math.combine.n bs.in 2
function #bs.math:combine
tellraw @a [{"text": "combine(4,2) = ","color":"dark_gray"},{"score":{"name":"$math.combine","objective":"bs.out"},"color":"gold"}]

Credits: Ethanout


Factorial#

#bs.math:factorial

Compute the factorial of the number.

Inputs
(score) $math.factorial.n bs.in

The number to be factorialized.

Technical limitation

Due to the limit of integers that can be stored in a score, the interval of bs.in.0 is limited to [0,12].

Output
(score) $math.factorial bs.out

The result of the operation

Example

Compute \(3!\)

# Once
scoreboard players set $math.factorial.n bs.in 3
function #bs.math:factorial
tellraw @a [{"text": "3! = ","color":"dark_gray"},{"score":{"name":"$math.factorial","objective":"bs.out"},"color":"gold"}]

Credits: KubbyDev


Greatest common denominator#

#bs.math:gcd

Compute the greatest common denominator of two numbers.

Inputs
(scores) $math.gcd.[a,b] bs.in

The two numbers.

Output
(score) $math.gcd bs.out

The greatest common denominator.

Example

Calculate the greatest common denominator between 16 and 12.

# Once
scoreboard players set $math.gcd.a bs.in 16
scoreboard players set $math.gcd.b bs.in 12
function #bs.math:gcd
tellraw @a [{"text": "gcd(16,12) = ", "color": "dark_gray"},{"score":{"name":"$math.gcd", "objective": "bs.out"}, "color": "gold"}]

Credits: Aksiome, Leirof


Rounded division#

#bs.math:divide

Allows you to divide one number by another by rounding the result to the nearest whole number (where Minecraft rounds down to the next whole number).

Inputs
(score) $math.divide.num bs.in

The numerator.

(score) $math.divide.den bs.in

The denominator.

Output
(score) $math.divide bs.out

The result of the division.

Example

Calculate \(9/5\)

# Once
scoreboard players set $math.divide.num bs.in 9
scoreboard players set $math.divide.den bs.in 5
function #bs.math:divide
tellraw @a [{"text": "9 / 5 = ", "color": "dark_gray"},{"score":{"name":"$math.divide", "objective": "bs.out"}, "color": "gold"}]

Credits: Aksiome, theogiraudet


Power#

#bs.math:pow {scale:<scaling>}

Compute \(x^y\).

Inputs
(score) $math.pow.base bs.in

The base.

(score) $math.pow.exp bs.in

The exponent.

(macro variable) scale: double Scalar for the functionโ€™s input base and the output.

Output
(score) $math.pow bs.out

The result of the calculation.

Example

Compute \(2.245^6\):

# Once
scoreboard players set $math.pow.base bs.in 2245
scoreboard players set $math.pow.exp bs.in 6
function #bs.math:pow {scale:1000}
tellraw @a [{"text": "(2.245^6)*(1000) = ", "color": "dark_gray"},{"score":{"name":"$math.pow", "objective": "bs.out"}, "color": "gold"}]

#bs.math:pow2

Compute \(2^n\).

Inputs
(score) $math.pow2.exp bs.in

The exponent.

Output
(score) $math.pow2 bs.out

The result of the calculation.

Example

Compute \(2^6\):

# Once
scoreboard players set $math.pow2.exp bs.in 6
function #bs.math:pow2
tellraw @a [{"text": "2^6 = ", "color": "dark_gray"},{"score":{"name":"$math.pow2", "objective": "bs.out"}, "color": "gold"}]

Credits: Aksiome, Leirof


Square root#

#bs.math:isqrt

Compute the square root of an int number.

Inputs
(score) $math.isqrt.value bs.in

The int number you want to calculate the square root of.

Output
(score) $math.isqrt bs.out

The floor result of the square root.

Example

Calculate and display \(\sqrt{42}\):

# Once
scoreboard players set $math.isqrt.value bs.in 42
function #bs.math:isqrt
tellraw @a [{"text": "sqrt(42) = ", "color": "dark_gray"},{"score":{"name":"$math.isqrt", "objective": "bs.out"}, "color": "gold"}]

#bs.math:sqrt

Compute the square root of a floating number.

Input
(storage) bs:in math.sqrt.value

The floating number you want to calculate the square root of.

Output
(storage) bs:out math.sqrt

The result of the calculation.

Example

Calculate and display \(\sqrt{42}\):

# Once
data modify storage bs:in math.sqrt.value set value 42
function #bs.math:sqrt
tellraw @a [{"text": "sqrt(42) = ", "color": "dark_gray"},{"nbt": "math.sqrt", "storage": "bs:out", "color": "gold"}]

Credits: Ethanout


Exponential#

#bs.math:exp

Compute the exponential function.

Inputs
(storage) bs:in math.exp.value

The number to be exponentiated.

Technical limitation

Due to the limit of integers that can be stored in a score, the interval of bs:in is limited to [-6,15[.

Output
(storage) bs:out math.exp

The result of the operation.

Example

Calculate \(exp(3)\)

# Once

data modify storage bs:in math.exp.value set value 3.0
function #bs.math:exp
data get storage bs:out math.exp

Credits: Aksiome, KubbyDev


Logarithm#

#bs.math:log

Compute the Neperian logarithm (base e) of a number.

Inputs
(storage) bs:in math.log.value

The number to be logarithmized.

Output
(storage) bs:out math.log

The result of the operation.

Example

Calculate \(ln(28)\)

# Once
data modify storage bs:in math.log.value set value 28.0
function #bs.math:log
data get storage bs:out math.log

#bs.math:log2

Compute the logarithm in base 2 of a number.

Inputs
(storage) bs:in math.log2.value

The number to be logarithmized.

Output
(storage) bs:out math.log2

The result of the operation.

Example

Calculate \(log_2(28)\):

# Once
data modify storage bs:in math.log2.value set value 28.0
function #bs.math:log2
data get storage bs:out math.log2

#bs.math:log10

Compute the logarithm in base 10 of a number.

Inputs
(storage) bs:in math.log10.value

The number to be logarithmized.

Output
(storage) bs:out math.log10

The result of the operation.

Example

Calculate \(log_{10}(28)\)

# Once
data modify storage bs:in math.log10.value set value 28.0
function #bs.math:log10
data get storage bs:out math.log10

#bs.math:loga

Computes the logarithm in base a of a number.

Inputs
(storage) bs:in math.loga.value

The number to be logarithmized.

(storage) bs:in math.loga.a

The base of the logarithm.

Output
(storage) bs:out math.loga

The result of the operation.

Example

Calculate \(log_4(28)\)

# Once
data modify storage bs:in math.loga.a set value 4
data modify storage bs:in math.loga.value set value 28.0
function #bs.math:loga
data get storage bs:out math.loga

Credits: Aksiome, KubbyDev


Float radix#

#bs.math:frexp

Decompose a floating point number into a normalized fraction and an integral power of two.

Inputs
(storage) bs:in math.frexp.value

Floating-point value.

Output
(storage) math.frexp.e bs.out

The exponent power of 2.

(storage) math.frexp.x bs.out

The normalized fraction (mantissa) in range ]-1,-0.5] or [0.5,1[.

Example

Decompose 5.8 into its mantissa and exponent.

# Once
data modify storage bs:in math.frexp.value set value 5.8
function #bs.math:frexp
data get storage bs:out math.frexp

Credits: Aksiome


๐Ÿ’ฌ Did it help you?

Feel free to leave your questions and feedbacks below!