Difference between revisions of "FractalNoise (日本語)"
(Created page with "LÖVE のノイズ関数を使用してフラクタル・ノイズを生成します。 <source lang="lua"> -- x, y, z はサンプルの位置 -- iter はノイズのイテ...") |
m |
||
Line 2: | Line 2: | ||
<source lang="lua"> | <source lang="lua"> | ||
− | -- x, y, z はサンプルの位置 | + | -- x, y, z, w はサンプルの位置 |
-- iter はノイズのイテレーション回数 (オクターブ) です (標準: 1) | -- iter はノイズのイテレーション回数 (オクターブ) です (標準: 1) | ||
-- amp は増幅係数 (標準: 0.5) | -- amp は増幅係数 (標準: 0.5) | ||
-- freq は周波数係数 (標準: 2) | -- freq は周波数係数 (標準: 2) | ||
+ | |||
+ | -- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。 | ||
+ | function genFractalNoise1(x, iter, amp, freq) | ||
+ | val = love.math.noise(x)*2-1 | ||
+ | freq = freq or 2 | ||
+ | iter = iter or 1 | ||
+ | amp = amp or 0.5 | ||
+ | local n = 0 | ||
+ | while n < iter-1 do | ||
+ | val = val + (love.math.noise(x*freq)*2-1)*amp | ||
+ | freq = freq * freq | ||
+ | amp = amp * amp | ||
+ | n = n + 1 | ||
+ | end | ||
+ | return math.max(math.min(val, 1.0), -1.0) | ||
+ | end | ||
-- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。 | -- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。 | ||
Line 32: | Line 48: | ||
while n < iter-1 do | while n < iter-1 do | ||
val = val + (love.math.noise(x*freq, y*freq, z*freq)*2-1)*amp | val = val + (love.math.noise(x*freq, y*freq, z*freq)*2-1)*amp | ||
+ | freq = freq * freq | ||
+ | amp = amp * amp | ||
+ | n = n + 1 | ||
+ | end | ||
+ | return math.max(math.min(val, 1.0), -1.0) | ||
+ | end | ||
+ | |||
+ | -- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。 | ||
+ | function genFractalNoise4(x, y, z, w, iter, amp, freq) | ||
+ | local val = love.math.noise(x, y, z, w)*2-1 | ||
+ | freq = freq or 2 | ||
+ | iter = iter or 1 | ||
+ | amp = amp or 0.5 | ||
+ | local n = 0 | ||
+ | while n < iter-1 do | ||
+ | val = val + (love.math.noise(x*freq, y*freq, z*freq, w*freq)*2-1)*amp | ||
freq = freq * freq | freq = freq * freq | ||
amp = amp * amp | amp = amp * amp | ||
Line 39: | Line 71: | ||
end | end | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
[[Category:Snippets (日本語)]] | [[Category:Snippets (日本語)]] | ||
{{#set:Author=User:Substitute541}} | {{#set:Author=User:Substitute541}} | ||
− | {{#set:Description= | + | {{#set:LOVE Version=>0.9.0}} |
+ | {{#set:Description=一から三次元までのフラクタル・ノイズを生成します。}} |
Latest revision as of 23:27, 14 November 2016
LÖVE のノイズ関数を使用してフラクタル・ノイズを生成します。
-- x, y, z, w はサンプルの位置
-- iter はノイズのイテレーション回数 (オクターブ) です (標準: 1)
-- amp は増幅係数 (標準: 0.5)
-- freq は周波数係数 (標準: 2)
-- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。
function genFractalNoise1(x, iter, amp, freq)
val = love.math.noise(x)*2-1
freq = freq or 2
iter = iter or 1
amp = amp or 0.5
local n = 0
while n < iter-1 do
val = val + (love.math.noise(x*freq)*2-1)*amp
freq = freq * freq
amp = amp * amp
n = n + 1
end
return math.max(math.min(val, 1.0), -1.0)
end
-- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。
function genFractalNoise2(x, y, iter, amp, freq)
val = love.math.noise(x, y)*2-1
freq = freq or 2
iter = iter or 1
amp = amp or 0.5
local n = 0
while n < iter-1 do
val = val + (love.math.noise(x*freq, y*freq)*2-1)*amp
freq = freq * freq
amp = amp * amp
n = n + 1
end
return math.max(math.min(val, 1.0), -1.0)
end
-- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。
function genFractalNoise3(x, y, z, iter, amp, freq)
local val = love.math.noise(x, y, z)*2-1
freq = freq or 2
iter = iter or 1
amp = amp or 0.5
local n = 0
while n < iter-1 do
val = val + (love.math.noise(x*freq, y*freq, z*freq)*2-1)*amp
freq = freq * freq
amp = amp * amp
n = n + 1
end
return math.max(math.min(val, 1.0), -1.0)
end
-- [-1.0, 1.0] の範囲内にあるフラクタル・ノイズの値を返します。
function genFractalNoise4(x, y, z, w, iter, amp, freq)
local val = love.math.noise(x, y, z, w)*2-1
freq = freq or 2
iter = iter or 1
amp = amp or 0.5
local n = 0
while n < iter-1 do
val = val + (love.math.noise(x*freq, y*freq, z*freq, w*freq)*2-1)*amp
freq = freq * freq
amp = amp * amp
n = n + 1
end
return math.max(math.min(val, 1.0), -1.0)
end