Difference between revisions of "Math"
Line 129: | Line 129: | ||
[[math.clamp]] ''returns a number between min and max, inclusive''<br/><!--GIDEROSMTD:math.clamp(v,min,max) returns a number between min and max, inclusive--> | [[math.clamp]] ''returns a number between min and max, inclusive''<br/><!--GIDEROSMTD:math.clamp(v,min,max) returns a number between min and max, inclusive--> | ||
[[math.cos]] ''returns cosine value of angle rad''<br/><!--GIDEROSMTD:math.cos(rad) returns cosine value of angle rad--> | [[math.cos]] ''returns cosine value of angle rad''<br/><!--GIDEROSMTD:math.cos(rad) returns cosine value of angle rad--> | ||
+ | [[math.cosh]] ''returns hyperbolic cosine of x''<br/><!--GIDEROSMTD:math.cosh(rad) returns hyperbolic cosine of x--> | ||
[[math.deg]] ''returns angle in degrees of radians rad''<br/><!--GIDEROSMTD:math.deg(rad) returns angle in degrees of radians rad--> | [[math.deg]] ''returns angle in degrees of radians rad''<br/><!--GIDEROSMTD:math.deg(rad) returns angle in degrees of radians rad--> | ||
[[math.exp]] ''returns e^v''<br/><!--GIDEROSMTD:math.exp(v) returns e^v--> | [[math.exp]] ''returns e^v''<br/><!--GIDEROSMTD:math.exp(v) returns e^v--> | ||
Line 140: | Line 141: | ||
[[math.min]] ''returns minimum in a list of one or more values''<br/><!--GIDEROSMTD:math.min(v1,...) returns minimum in a list of one or more values--> | [[math.min]] ''returns minimum in a list of one or more values''<br/><!--GIDEROSMTD:math.min(v1,...) returns minimum in a list of one or more values--> | ||
[[math.modf]] ''returns the integer and fractional values of a number''<br/><!--GIDEROSMTD:math.modf(value) returns the integer and fractional values of a number--> | [[math.modf]] ''returns the integer and fractional values of a number''<br/><!--GIDEROSMTD:math.modf(value) returns the integer and fractional values of a number--> | ||
+ | [[math.noise]] ''returns a perlin noise value''<br/><!--GIDEROSMTD:math.noise(v1,v2,v3) returns a perlin noise value--> | ||
[[math.pow]] ''returns v1 raised to the power of v2''<br/><!--GIDEROSMTD:math.pow(v1,v2) returns v1 raised to the power of v2--> | [[math.pow]] ''returns v1 raised to the power of v2''<br/><!--GIDEROSMTD:math.pow(v1,v2) returns v1 raised to the power of v2--> | ||
[[math.rad]] ''returns angle in radians of degrees deg''<br/><!--GIDEROSMTD:math.rad(deg) returns angle in radians of degrees deg--> | [[math.rad]] ''returns angle in radians of degrees deg''<br/><!--GIDEROSMTD:math.rad(deg) returns angle in radians of degrees deg--> | ||
[[math.random]] ''returns random real [0,1-, integer [1,n] or real [1,u](with n=1-''<br/><!--GIDEROSMTD:math.random(n,u) returns random real [0,1-, integer [1,n] or real [1,u](with n=1- --> | [[math.random]] ''returns random real [0,1-, integer [1,n] or real [1,u](with n=1-''<br/><!--GIDEROSMTD:math.random(n,u) returns random real [0,1-, integer [1,n] or real [1,u](with n=1- --> | ||
[[math.randomseed]] ''sets seed for pseudo-random number generator''<br/><!--GIDEROSMTD:math.randomseed(seed) sets seed for pseudo-random number generator--> | [[math.randomseed]] ''sets seed for pseudo-random number generator''<br/><!--GIDEROSMTD:math.randomseed(seed) sets seed for pseudo-random number generator--> | ||
+ | [[math.round]] ''returns integer with the smallest difference between it and the given number''<br/><!--GIDEROSMTD:math.round(v) returns integer with the smallest difference between it and the given number--> | ||
[[math.sign]] ''returns sign of v''<br/><!--GIDEROSMTD:math.sign(v) returns sign of v--> | [[math.sign]] ''returns sign of v''<br/><!--GIDEROSMTD:math.sign(v) returns sign of v--> | ||
[[math.sin]] ''returns sine value of angle rad''<br/><!--GIDEROSMTD:math.sin(rad) returns sine value of angle rad--> | [[math.sin]] ''returns sine value of angle rad''<br/><!--GIDEROSMTD:math.sin(rad) returns sine value of angle rad--> | ||
+ | [[math.sinh]] ''returns hyperbolic sine of v''<br/><!--GIDEROSMTD:math.sinh(v) returns hyperbolic sine of v--> | ||
[[math.sqrt]] ''returns square root of v''<br/><!--GIDEROSMTD:math.sqrt(v) returns square root of v--> | [[math.sqrt]] ''returns square root of v''<br/><!--GIDEROSMTD:math.sqrt(v) returns square root of v--> | ||
[[math.tan]] ''returns tangent value of angle rad''<br/><!--GIDEROSMTD:math.tan(rad) returns tangent value of angle rad--> | [[math.tan]] ''returns tangent value of angle rad''<br/><!--GIDEROSMTD:math.tan(rad) returns tangent value of angle rad--> | ||
+ | [[math.tanh]] ''returns hyperbolic tangent of v''<br/><!--GIDEROSMTD:math.tanh(v) returns hyperbolic tangent of v--> | ||
[[vector]] ''vectors''<br/><!--GIDEROSMTD:vector() vectors--> | [[vector]] ''vectors''<br/><!--GIDEROSMTD:vector() vectors--> | ||
| style="width: 50%; vertical-align:top;"| | | style="width: 50%; vertical-align:top;"| | ||
+ | |||
=== '''Gideros specific methods''' === | === '''Gideros specific methods''' === | ||
[[math.length]] ''returns the length of a vector''<br/><!-- GIDEROSMTD:math.length(v) returns the length of a vector --> | [[math.length]] ''returns the length of a vector''<br/><!-- GIDEROSMTD:math.length(v) returns the length of a vector --> |
Revision as of 18:38, 16 January 2023
Supported platforms:
Available since: Gideros 2011.6
Description
math table holds most commonly used math functions and constants.
Example
A nice example demonstrating various Gideros specific maths functions
local myappwidth = application:getContentWidth()
local myappheight = application:getContentHeight()
application:setBackgroundColor(0x555555)
local pixel = Pixel.new(0xffffff, 1, 16, 16)
pixel:setAnchorPoint(0.5, 0.5)
pixel:setPosition(7*myappwidth/10, 5*myappheight/10)
stage:addChild(pixel)
local raycast = Shape.new()
stage:addChild(raycast)
-- circle
local p=Particles.new()
stage:addChild(p)
local circlepts={}
circlepts[#circlepts+1] = { -- 1st circle
x=128, y=128,
size=128,
color=0x0000ff,
id=#circlepts+1,
radius=128/2,
}
circlepts[#circlepts+1] = { -- 2nd circle
x=128*3, y=128,
size=128*1.5,
color=0x0000aa,
id=#circlepts+1,
radius=128*1.5/2,
}
circlepts[#circlepts+1] = { -- 3rd circle
x=128*2, y=128*3,
size=64,
color=0x000055,
id=#circlepts+1,
radius=64/2,
}
p:addParticles(circlepts)
-- markers
local pedge = p:addParticles{ {x=0, y=0, size=5, color=0x0} }[1]
local pray = p:addParticles{ {x=0, y=0, size=5, color=0xffffff, alpha=1} }[1]
local pray2 = p:addParticles{ {x=0, y=0, size=5, color=0xaaaaaa, alpha=1} }[1]
local shapeid
stage:addEventListener(Event.MOUSE_HOVER,function (e)
local mouse={x=e.x, y=e.y}
-- reset all circles original colors
for i = 1, #circlepts do
p:setParticleColor(i, circlepts[i].color, 1)
end
-- gets the mouse nearest circle id
local nearestpoint, npdistance = math.nearest(mouse, circlepts)
shapeid=nearestpoint.id
-- highlights circle if mouse is close
if npdistance < circlepts[shapeid].radius + 48 then
p:setParticleColor(shapeid, 0xffff00, 1)
end
-- checks if mouse is inside circle
local inside = math.inside(mouse, nearestpoint)
if inside < 0 then
p:setParticleColor(shapeid, 0x00ff00, 1)
end
-- edge
local d = math.edge(mouse, nearestpoint)
p:setParticlePosition(pedge, d.x, d.y)
-- raycast
local r = math.raycast( -- origin, direction, shape
{x=mouse.x, y=mouse.y},
math.normalize({x=mouse.x-pixel:getX(), y=mouse.y-pixel:getY()}),
circlepts
)
if r[1] then
p:setParticlePosition(pray, r[1].point.x, r[1].point.y)
p:setParticleColor(pray, p:getParticleColor(pray), 1)
else
p:setParticleColor(pray, p:getParticleColor(pray), 0)
end
if r[2] then
p:setParticlePosition(pray2, r[2].point.x, r[2].point.y)
p:setParticleColor(pray2, p:getParticleColor(pray2), 1)
else
p:setParticleColor(pray2, p:getParticleColor(pray2), 0)
end
-- a line
raycast:clear()
raycast:setLineStyle(5, 0xffffff, 0.5)
raycast:beginPath()
raycast:moveTo(mouse.x, mouse.y)
raycast:lineTo(pixel:getX(), pixel:getY())
raycast:endPath()
end)
TO DO: test and add missing Luau Math functions from https://create.roblox.com/docs/reference/engine/libraries/math
Methodsmath.abs returns absolute value of v |
Gideros specific methodsmath.length returns the length of a vector EventsConstants |