カラー1 - NodeBox ――の続き
カラー1 - NodeBox - Haitena だいありー
の続き.
上では,previewやswarmといった既存メソッドを使ったけれど,この関数に似た描画をする関数を自作してみた.ちなみにpreviewではsize()に合わせた描画は出来なかったけれど,自作版ではその辺配慮してみた.色テーマの取得は前回同様.
自作関数による色テーマの描画デモサンプル
import math as m def demo_colors(clr_list, n=int(m.floor(3*m.sqrt((WIDTH+HEIGHT)/2))), colorbar=None): sz = min(WIDTH, HEIGHT) div = 2.4 div_extra = div if not colorbar else div/0.6 for i in xrange(n): r = random(sz/20, sz/10) coord_x = WIDTH/2 + random(-WIDTH/div, WIDTH/div) coord_y = HEIGHT/2 + random(-HEIGHT/div, HEIGHT/div_extra) clr1 = choice(clr_list) fill(clr1.r, clr1.g, clr1.b, random(0.5, 1.0)) oval(coord_x-r, coord_y-r, r*2, r*2) r *= random(0.6, 1.0) clr2 = choice(clr_list) fill(clr2.r, clr2.g, clr2.b, random(0.5, 1.0)) oval(coord_x-r, coord_y-r, r*2, r*2) if colorbar: x = y = 0 w = h = sz/10 for c in clr_list: push() translate(w/2, HEIGHT-(h*1.5)) fill(c) rect(x, y, w, h) pop() x += w # main size(300, 200) web = ximport("web") themes = web.kuler.search("sea") clr = ximport("colors") sea = clr.list(themes[0]) background(sea.darkest.darken(0.35)) demo_colors(sea, colorbar=True)
size()に指定するサイズが小さい場合と大きい場合で,単調な比例関係にしてしまうと,円の密度みたいなのがちょっと微妙だったので,分かりにくいけれど,描画する円の数を以下で指定することにした(デフォルトの場合):
ルート取ってサイズの大小での差を小さくする.本当はlog取るのが常套かもしれないが,ルートでもいいかなーという感じで.
これでsize()に依らない描画が可能.
また,demo_colors()のcolorbarを指定すると左下にカラーバーを表示する.
colorbarと円が重ならないように配慮……したことでdemo_colors()自体が分かりにくくなってしまったけれど(ぇ
前回はbananaを検索した結果の色テーマを取得したが,今回はseaで検索してみた.
もちろん,demo_colors()にはcolorオブジェクトのリストを渡せばおkなので,自作色リストをデモすることも出来る.
これは楽しい.