function param1() return "密度", 5, 100, 50 end function param2() return "色ランダム", 0, 100, 40 end function param3() return "サイズランダム", 0, 100, 20 end function default_size() return 40, 0.5 end function set_petal( w, rad ) bs_bezier_begin( 0, 0 ) bs_bezier_c( -0.5, -1.5, 0.5, -1.5, 0,0 ) bs_bezier_mul( w, w*0.8 ) bs_bezier_rotate( rad ) end function main( x, y, p ) local w = bs_width() if w < 5 then w = 5 end if not firstDraw then local distance = bs_distance( lastDrawX - x, lastDrawY - y ) if distance < w/2 then return 0 end end local num = 10 * bs_param1() / 100 local i for i = 0,num do local dx = bs_grand( 0, 0.4 ) * w local dy = bs_grand( 0, 0.4 ) * w local rnd = 0.5 + math.random() * bs_param3()/200 local r,g,b = bs_forebg( 1.0 - math.random()*bs_param2()/100 ) local radrnd = (0.5 - math.random()) * 3.14159 / 2 radrnd = radrnd + bs_atan( dx, dy ) + 3.14159/2 local leaf = 3 for j = 0,leaf-1 do local srnd = 0.9 + 0.2*math.random() set_petal( rnd*w/2 * srnd, 3.14159/1.2/leaf * (j-1) + radrnd ) bs_bezier_move( x + dx, y + dy ) bs_fill( r,g,b, 255 ) end end lastDrawX = x lastDrawY = y firstDraw = false return 1 end lastDrawX = 0 lastDrawY = 0 firstDraw = true