Lua/Math Library
< LuaLua modules based on the Scribunto/Lua extension are stored in resource pages using the Module: namespace. Each module uses a table to hold functions and variables, and that containing table is returned at the end of the module code.[1] This lesson will show you how to use the Lua Math library in your scripts.
Prerequisites
This lesson assumes you have already completed the Frame Object lesson.
Create a Lua Script that Uses the Math Library
To create a Lua script that uses the Math library:
- Navigate to Module:Sandbox.
- Clear all existing code.
- It's a sandbox. Everyone is free to play in the sandbox. But if you find another user is actively editing the sandbox at the same time, you may also use Module:Sandbox/Username, where Username is your Wikiversity username.
- Add the following code and save the page:
local p = {} function p.abs(frame) local x = frame.args[1] return ';abs\n:math.abs(' .. x .. ') is ' .. math.abs(x) .. '\n' end function p.acos(frame) local x = frame.args[1] return ';acos\n:math.acos(' .. x .. ') is ' .. math.acos(x) .. '\n' end function p.asin(frame) local x = frame.args[1] return ';asin\n:math.asin(' .. x .. ') is ' .. math.asin(x) .. '\n' end function p.atan(frame) local x = frame.args[1] return ';atan\n:math.atan(' .. x .. ') is ' .. math.atan(x) .. '\n' end function p.atan2(frame) local y = frame.args[1] local x = frame.args[2] return ';atan2\n:math.atan2(' .. y .. ', ' .. x .. ') is ' .. math.atan2(y, x) .. '\n' end function p.ceil(frame) local x = frame.args[1] return ';ceil\n:math.ceil(' .. x .. ') is ' .. math.ceil(x) .. '\n' end function p.cos(frame) local x = frame.args[1] return ';cos\n:math.cos(' .. x .. ') is ' .. math.cos(x) .. '\n' end function p.cosh(frame) local x = frame.args[1] return ';cosh\n:math.cosh(' .. x .. ') is ' .. math.cosh(x) .. '\n' end function p.deg(frame) local x = frame.args[1] return ';deg\n:math.deg(' .. x .. ') is ' .. math.deg(x) .. '\n' end function p.exp(frame) local x = frame.args[1] return ';exp\n:math.exp(' .. x .. ') is ' .. math.exp(x) .. '\n' end function p.floor(frame) local x = frame.args[1] return ';floor\n:math.floor(' .. x .. ') is ' .. math.floor(x) .. '\n' end function p.fmod(frame) local x = frame.args[1] local y = frame.args[2] return ';fmod\n:math.fmod(' .. x .. ', ' .. y .. ') is ' .. math.fmod(x, y) .. '\n' end function p.frexp(frame) local x = frame.args[1] return ';frexp\n:math.frexp(' .. x .. ') is ' .. math.frexp(x) .. '\n' end function p.huge() return ';huge\n:math.huge is ' .. math.huge .. '\n' end function p.ldexp(frame) local m = frame.args[1] local e = frame.args[2] return ';ldexp\n:math.ldexp(' .. m .. ', ' .. e .. ') is ' .. math.ldexp(m, e) .. '\n' end function p.log(frame) local x = frame.args[1] return ';log\n:math.log(' .. x .. ') is ' .. math.log(x) .. '\n' end function p.log10(frame) local x = frame.args[1] return ';log10\n:math.log10(' .. x .. ') is ' .. math.log10(x) .. '\n' end function p.max(frame) local x = frame.args[1] local y = frame.args[2] return ';max\n:math.max(' .. x .. ', ' .. y .. ') is ' .. math.max(x, y) .. '\n' end function p.min(frame) local x = frame.args[1] local y = frame.args[2] return ';min\n:math.min(' .. x .. ', ' .. y .. ') is ' .. math.min(x, y) .. '\n' end function p.modf(frame) local x = frame.args[1] return ';modf\n:math.modf(' .. x .. ') is ' .. math.modf(x) .. '\n' end function p.pi() return ';pi\n:math.pi is ' .. math.pi .. '\n' end function p.pow(frame) local x = frame.args[1] local y = frame.args[2] return ';pow\n:math.pow(' .. x .. ', ' .. y .. ') is ' .. math.pow(x, y) .. '\n' end function p.rad(frame) local x = frame.args[1] return ';rad\n:math.rad(' .. x .. ') is ' .. math.rad(x) .. '\n' end function p.random(frame) local m = frame.args[1] local n = frame.args[2] return ';random\n:math.random(' .. m .. ', ' .. n .. ') is ' .. math.random(m, n) .. '\n' end function p.randomseed(frame) local m = frame.args[1] local n = frame.args[2] math.randomseed(os.time()) return ';randomseed\n:math.random(' .. m .. ', ' .. n .. ') is ' .. math.random(m, n) .. '\n' end function p.sin(frame) local x = frame.args[1] return ';sin\n:math.sin(' .. x .. ') is ' .. math.sin(x) .. '\n' end function p.sinh(frame) local x = frame.args[1] return ';sinh\n:math.sinh(' .. x .. ') is ' .. math.sinh(x) .. '\n' end function p.sqrt(frame) local x = frame.args[1] return ';sqrt\n:math.sqrt(' .. x .. ') is ' .. math.sqrt(x) .. '\n' end function p.tan(frame) local x = frame.args[1] return ';tan\n:math.tan(' .. x .. ') is ' .. math.tan(x) .. '\n' end function p.tanh(frame) local x = frame.args[1] return ';tanh\n:math.tanh(' .. x .. ') is ' .. math.tanh(x) .. '\n' end return p
Test Your Lua Script
To test your Lua script:
- Navigate to either the Module_talk:Sandbox page, the Wikiversity:Sandbox page, or your own user or sandbox page.
- Add the following code and save the page:
{{#invoke:Sandbox|abs|-1}} {{#invoke:Sandbox|acos|1}} {{#invoke:Sandbox|asin|1}} {{#invoke:Sandbox|atan|1}} {{#invoke:Sandbox|atan2|1|1}} {{#invoke:Sandbox|ceil|1.5}} {{#invoke:Sandbox|cos|0.78539816339745}} {{#invoke:Sandbox|cosh|0.78539816339745}} {{#invoke:Sandbox|deg|0.78539816339745}} {{#invoke:Sandbox|exp|1}} {{#invoke:Sandbox|floor|1.5}} {{#invoke:Sandbox|fmod|5|3}} {{#invoke:Sandbox|frexp|1}} {{#invoke:Sandbox|huge}} {{#invoke:Sandbox|ldexp|1|2}} {{#invoke:Sandbox|log| 2.718281828459}} {{#invoke:Sandbox|log10|100}} {{#invoke:Sandbox|max|1|2}} {{#invoke:Sandbox|min|1|2}} {{#invoke:Sandbox|modf|1.5}} {{#invoke:Sandbox|pi}} {{#invoke:Sandbox|pow|10|2}} {{#invoke:Sandbox|rad|45}} {{#invoke:Sandbox|random|1|6}} {{#invoke:Sandbox|randomseed|1|6}} {{#invoke:Sandbox|sin|0.78539816339745}} {{#invoke:Sandbox|sinh|0.78539816339745}} {{#invoke:Sandbox|sqrt|100}} {{#invoke:Sandbox|tan|0.78539816339745}} {{#invoke:Sandbox|tanh|0.78539816339745}}
The result should be similar to:
- abs
- math.abs(-1) is 1
- acos
- math.acos(1) is 0
- asin
- math.asin(1) is 1.5707963267949
- atan
- math.atan(1) is 0.78539816339745
- atan2
- math.atan2(1, 1) is 0.78539816339745
- ceil
- math.ceil(1.5) is 2
- cos
- math.cos(0.78539816339745) is 0.70710678118655
- cosh
- math.cosh(0.78539816339745) is 1.324609089252
- deg
- math.deg(0.78539816339745) is 45
- exp
- math.exp(1) is 2.718281828459
- floor
- math.floor(1.5) is 1
- fmod
- math.fmod(5, 3) is 2
- frexp
- math.frexp(1) is 0.5
- huge
- math.huge is inf
- ldexp
- math.ldexp(1, 2) is 4
- log
- math.log( 2.718281828459) is 0.99999999999998
- log10
- math.log10(100) is 2
- max
- math.max(1, 2) is 2
- min
- math.min(1, 2) is 1
- modf
- math.modf(1.5) is 1
- pi
- math.pi is 3.1415926535898
- pow
- math.pow(10, 2) is 100
- rad
- math.rad(45) is 0.78539816339745
- random
- math.random(1, 6) is 2
- randomseed
- math.random(1, 6) is 1
- sin
- math.sin(0.78539816339745) is 0.70710678118655
- sinh
- math.sinh(0.78539816339745) is 0.86867096148601
- sqrt
- math.sqrt(100) is 10
- tan
- math.tan(0.78539816339745) is 1
- tanh
- math.tanh(0.78539816339745) is 0.65579420263267
Understand Your Lua Script
To understand your Lua script:
-
math.abs(x)
returns the absolute value ofx
returns . -
math.acos(x)
returns the arc cosine ofx
(given in radians). -
math.asin(x)
returns the arc sine ofx
(given in radians). -
math.atan(x)
returns the arc tangent ofx
(given in radians). -
math.atan2(y, x)
returns the arc tangent ofy/x
(given in radians), using the signs of both parameters to find the quadrant of the result. -
math.ceil(x)
returns the smallest integer larger than or equal tox
. -
math.cos(x)
returns the cosine ofx
(given in radians). -
math.cosh(x)
returns the hyperbolic cosine ofx
. -
math.deg(x)
returns the anglex
(given in radians) in degrees. -
math.exp(x)
returns the valuee^x
. -
math.floor(x)
returns the largest integer smaller than or equal tox
. -
math.fmod(x, y)
returns the remainder of the division ofx
byy
that rounds the quotient towards zero. -
math.frexp(x)
returns two values m and e such thatx
= m times 2^e, e is an integer, and the absolute value of m is in the range [0.5, 1) -
math.huge
returns the value representing positive infinity; larger than or equal to any other numerical value. -
math.ldexp(m, e)
returnsm
times2^e
(e
should be an integer). -
math.log(x)
returns the natural logarithm ofx
. -
math.log10(x)
returns the base-10 logarithm ofx
. -
math.max(x, y)
returns the max
imum value among its arguments. -
math.min(x, y)
returns the minimum value among its arguments. -
math.modf(x)
returns two numbers, the integral part ofx
and the fractional part ofx
. -
math.pi
returns the value of pi. -
math.pow(x, y)
returnsx^y
. -
math.rad(x)
returns the anglex
(given in degrees) in radians. -
math.random(m, n)
returns a pseudo-random integer in the range[m,n]
.- Note that unless randomseed is called first, the random number sequence will be the same every time, meaning not random.
-
math.randomseed(os.time())
seeds the random number generator with the current server operating system elapsed time in seconds. -
math.sin(x)
returns the sine ofx
(given in radians). -
math.sinh(x)
returns the hyperbolic sine ofx
. -
math.sqrt(x)
returns the square root ofx
. -
math.tan(x)
returns the tangent ofx
(given in radians). -
math.tanh(x)
returns the hyperbolic tangent ofx
.
Conclusion
Congratulations! You've now created, tested, and understood a Lua script that uses the Math library. Return to the main Lua page to learn about other Lua code libraries.
See Also
References
This article is issued from Wikiversity - version of the Tuesday, March 08, 2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.