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>
 
== 寄贈者 ==
 
* [[User:Substitute541|Substitute541]]
 
  
 
[[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