mirror of
https://github.com/vrld/hump.git
synced 2024-11-23 12:24:19 +00:00
Merge pull request #86 from grunkgrunk/randomvector
added random vector function
This commit is contained in:
commit
cdafc00075
@ -92,6 +92,22 @@ Convert the vector to polar coordinates, i.e., the angle and the radius/lenth.
|
||||
|
||||
vector.fromPolar(phase1+phase2, abs1*abs2)
|
||||
|
||||
.. function:: vector.randomDirection(len_min, len_max)
|
||||
|
||||
:param number len_min: Minimum length of the vector.
|
||||
:param number len_max: Maximum length of the vector.
|
||||
:returns: ``x``, ``y``: A vector pointing in a random direction with a random length between len_min and len_max.
|
||||
|
||||
**Examples**::
|
||||
-- length is a random value between 1 and 5
|
||||
x,y = vector.randomDirection(1,5)
|
||||
|
||||
-- length is 1
|
||||
x,y = vector.randomDirection()
|
||||
|
||||
-- length is 100
|
||||
x,y = vector.randomDirection(100)
|
||||
|
||||
|
||||
.. function:: vector.mul(s, x,y)
|
||||
|
||||
|
@ -114,6 +114,21 @@ The ``angle`` is measured against the vector (1,0), i.e., the x axis.
|
||||
|
||||
a = vector.polar(math.pi,10)
|
||||
|
||||
.. function:: vector.randomDirection(len_min, len_max)
|
||||
|
||||
:param number len_min: Minimum length of the vector.
|
||||
:param number len_max: Maximum length of the vector.
|
||||
:returns: A vector pointing in a random direction with a random length between len_min and len_max.
|
||||
|
||||
**Examples**::
|
||||
-- length is a random value between 1 and 5
|
||||
rnd = vector.randomDirection(1,5)
|
||||
|
||||
-- length is 1
|
||||
rnd = vector.randomDirection()
|
||||
|
||||
-- length is 100
|
||||
rnd = vector.randomDirection(100)
|
||||
|
||||
.. function:: vector.isvector(v)
|
||||
|
||||
|
@ -79,9 +79,24 @@ local function len(x,y)
|
||||
end
|
||||
|
||||
local function fromPolar(angle, radius)
|
||||
radius = radius or 1
|
||||
return cos(angle)*radius, sin(angle)*radius
|
||||
end
|
||||
|
||||
local function randomDirection(len_min, len_max)
|
||||
len_min = len_min or 1
|
||||
len_max = len_max or len_min
|
||||
|
||||
assert(len_max > 0, "randomDirection: len_max must be greater than zero")
|
||||
assert(len_max >= len_min, "randomDirection: len_max must be greater than or equal to len_min")
|
||||
|
||||
local range = len_max - len_min
|
||||
local rnd = math.random() * range
|
||||
|
||||
local x,y = fromPolar(math.random()*2*math.pi)
|
||||
return x * (rnd + len_min), y * (rnd + len_min)
|
||||
end
|
||||
|
||||
local function toPolar(x, y)
|
||||
return atan2(y,x), len(x,y)
|
||||
end
|
||||
@ -139,8 +154,9 @@ end
|
||||
return {
|
||||
str = str,
|
||||
|
||||
fromPolar = fromPolar,
|
||||
toPolar = toPolar,
|
||||
fromPolar = fromPolar,
|
||||
toPolar = toPolar,
|
||||
randomDirection = randomDirection,
|
||||
|
||||
-- arithmetic
|
||||
mul = mul,
|
||||
|
24
vector.lua
24
vector.lua
@ -36,9 +36,22 @@ end
|
||||
local zero = new(0,0)
|
||||
|
||||
local function fromPolar(angle, radius)
|
||||
radius = radius or 1
|
||||
return new(cos(angle) * radius, sin(angle) * radius)
|
||||
end
|
||||
|
||||
local function randomDirection(len_min, len_max)
|
||||
len_min = len_min or 1
|
||||
len_max = len_max or len_min
|
||||
|
||||
assert(len_max > 0, "randomDirection: len_max must be greater than zero")
|
||||
assert(len_max >= len_min, "randomDirection: len_max must be greater than or equal to len_min")
|
||||
|
||||
local range = len_max - len_min
|
||||
local rnd = math.random() * range
|
||||
return fromPolar(math.random()*2*math.pi) * (rnd + len_min)
|
||||
end
|
||||
|
||||
local function isvector(v)
|
||||
return type(v) == 'table' and type(v.x) == 'number' and type(v.y) == 'number'
|
||||
end
|
||||
@ -195,5 +208,12 @@ end
|
||||
|
||||
|
||||
-- the module
|
||||
return setmetatable({new = new, fromPolar = fromPolar, isvector = isvector, zero = zero},
|
||||
{__call = function(_, ...) return new(...) end})
|
||||
return setmetatable({
|
||||
new = new,
|
||||
fromPolar = fromPolar,
|
||||
randomDirection = randomDirection,
|
||||
isvector = isvector,
|
||||
zero = zero
|
||||
}, {
|
||||
__call = function(_, ...) return new(...) end
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user