一様にランダム、ガウス分布にランダム
ブラシスクリプトで乱数を発生させるには、
- math.random( a, b )
- bs_grand( ave, sd1 )
の二つの方法があります。
普通に一様な分布の乱数を発生させたい場合は、math.randomを使います。math.random( a, b ) と渡せば、aからbの範囲の乱数値を得ることが出来ます。これは、一様な分布をしている、一般的な乱数値です。普通、乱数といえばこちらの事を言います。
偏りのある乱数分布を得たいなら、bs_grand関数を呼び出します。bs_grand( ave, sd1 ) を呼ぶと、aveを中心に、-sd1〜sd1の範囲内に68%の確率に収まるガウス分布(正規分布)の乱数を得ることができます。-sd1〜sd1の範囲を大きく超えることもあります。散布ブラシのような偏りのある散布表現をしたい場合などに利用できます。特殊な乱数です。
ブラシスクリプトで比べてみましょう。
function param1() return "gauss", 0, 1, 0 end function main( x, y, p ) if not firstDraw then local d = bs_distance( lastDrawX - x, lastDrawY - y ) if d < 30 then return 0 end end local r,g,b = bs_fore() local i for i=0,2000 do local rad = math.random() * 3.14 * 2 local distance = math.random( 0, 80 ) if bs_param1() == 1 then distance = bs_grand( 0, 60 ) end local dx,dy = bs_rotate( 0, distance, rad ) bs_pixel_set( x + dx, y + dy, r,g,b,255 ) end lastDrawX = x lastDrawY = y firstDraw = false return 1 end lastDrawX = 0 lastDrawY = 0 firstDraw = true