Category:Home/library (Total 7 items)
≪ 6-7 | 1-5
Categories - library
Pixie
- 2008-11-09 (日)
- library/type
Description
Nodebox用の最も古いライブラリの一つである。
Pixieの筆跡は、毎度異なるように見え、ミスを含み、不安定な下線で、変化する色の圧力を持つ。
筆跡はTom De Smedtの筆跡をベースにしている。
Download
略
Documentation
- How to get the library up and running
- Headings
- Paragraph text
- Doodles
- Diagrams
画像略 Pixie、WordNet、wikipediaの組み合わせ。 あらゆる与えられた問題について、無限の数の不完全な注意、計画、冗談、大言 壮語を作成。
How to get the library up and running
スクリプトと同じフォルダにpixieライブラリフォルダをおけばライブラリを見つけることができる。
また~/Library/Application Support/NodeBox/に置くことも可能である。
pixie = ximport("pixie")
Headings
heading()コマンドはテキストを太いフォントで描画させる
heading(str, x, y, width, pt=30, slant=0.0)
文字列strをポジションx,yにて与えられたline width、フォントサイズptで描画する。
コマンドはheadingの右下の角のポジションを(x,y)タプルで返す。
例
txt = "Fat trendy Pixie headers!"
pixie.heading(txt, 100, 100, 200, pt=15)
Paragraph text
text()コマンドは不完全な筆跡のブロックを描画させる。
text(str, x, y, width, pt=15, slant=0.5, line=False, serif=False)
文字列strをポジションx,yにて与えられたline width、フォントサイズptで描画する。
オプションのlineパラメータをTrueにすると、パラグラフに下線を引く。
selifをTrueにすると、テキストのキャラクタをselifに見えるようにする。
コマンドはheadingの右下の角のポジションを(x,y)タプルで返す。
例
str += "Pixie was originally a part of the Aunt Hillary code package,"
str += "a handwriting that looks different each time, contains mistakes,"
str += "has wobbly baselines and variable color pressure."
pixie.text(str, 20, 20, 200, pt=15)
tuzuku
- Comments (Close): 0
- TrackBack (Close): 0
Fatpath
- 2008-06-27 (金)
- library/type
原文http://www.nodebox.net/code/index.php/Fatpath
Fatpathはパス上の点において数学的処理をする。
本質的に、テキストのパスを加算する。
公式は以下になる。:
p1 + (p2 - p1) * fatness
この機能はテキストの形態に、(マルチプル-マスター フォントのように)細くしたり太くしたり出来、
同様に輪郭を越え、極細、極太フォントを計算出来る、ような機能をもたらす。
Screenshot
略
下のパスは上二つのパスより計算された。
Restrictions
fatpathはかなり馬鹿である。:
パスはポイントポイントで正確に合わなければならない。そうでないと、アルゴリズムは動かない。
これは(一般的に)、同じフォントファミリーのフォントのみ使用でき、その時でさえ、文字がマッチする保証は何もない、ことを意味する。
カーブを持った文字は特に厄介である。
特別なボタン(lettersthatwork)は、与えられたフォントにどの文字を使用できるかを示す。
Download
略
- Comments (Close): 0
- TrackBack (Close): 0
L-system
- 2008-06-21 (土)
- library/systems
L-system(Lindenmayer system)は、成長過程をモデルする為に使用される、ルールとシンボルのセットである。
http://en.wikipedia.org/wiki/L-system
L-systemは自然では再帰的(recursive in nature)である。これは、全体が「全体と同様な小さなパーツ」で作られることを意味する。
例えば、一本の木は、小さな枝の成長からできた大きな枝だと言える。
それぞれの小さな枝はまた成長し、小さな枝をつけたりする。
一つの枝がどのようになるかを知っていれば、我々は木全体をモデルすることが出来る。
また、再帰ルールに基ずくエレガントは環境は、ContextFreeを見よ。
http://www.contextfreeart.org/
NodeBoxのL-systemライブラリは再帰とルールセットにより簡単に動作する。
Frederik De Bleser と Mark Meyer によるコードを基にしている。
(ギャラリーにあるDryadとMark Meyer's L-systemを見よ。)
http://www.nodebox.net/code/index.php/Dryad
http://www.nodebox.net/code/index.php/Mark_Meyer_|_L-system
Download
略
Documentation
How to get the library up and running
NodeBoxのスクリプトが探すことが出来るように、lsystemライブラリフォルダをスクリプトと同じフォルダに入れる。
また、~/Library/Application Support/NodeBox/に置くことも出来る。
lsystem = ximport("lsystem")
Creating a new L-system
create(angle=20, segmentlength=40, rules={}, root=None)
create()コマンドは新しいL-systemオブジェクトを返す。オブジェクトは与えられたx, yポジションからキャンバス上を育つ。
オブジェクトはプロパティを持つ。
- lsystem.angle: +と-ルール シンボルに使用される回転のアングル
- lsystem.segmentlength: 単セグメントの長さ、もしくはサイズ
- lsystem.decrease: システムの成長におけるセグメントの減少量(0.7 がデフォルト)
- lsystem.threshold: この値より小さくなった場合にセグメントの描画を停止する(3.0 がデフォルト)
- lsystem.root: 成長の為の最初のルール (ルール key "1" がデフォルト)
- lsystem.rules: DNAシステムの辞書のルール
- lsystem.commands: カスタムコマンド シンボルの辞書
- lsystem.cost: 単セグメントの描画にかかる時間 (0.25 がデフォルト)
L-systemオブジェクトは描画の為の2つのメソッドを持つ。
lsystem.draw(x, y, generation, time=None, ease=None)
lsystem.segment(length, generation, time=None, id=None)
lsystem.draw()メソッドは与えられた位置での成長パターンを描画する。
generation(世代)パラメータは、どれだけ深くパターンが続くかを決定する。
我々の「木は大きな枝である」の例題では、世代 3 は以下を意味する。:
一本の枝(1)を描き、枝(1)を伸ばしたものが、全て育成し枝々(3)になる。
たくさんのセグメントが世代が終るまで、もしくはlsystem.thresholdより小くなるまで育成する。
timeパラメータはアニメーション内で使用出来る。
セグメントが描画されると、lsystem.costと等しい少しの時間を少しずつ崩す。
アニメーション内でゼロからtimeが始まり、徐々に増大すると、セグメントはより大きくなり、それらのより大きなものは描画される。
(costを支払うより多くのtimeがあるので)
2番目のオプションパラメータ easeはアングルの回転を進展させる為に使用出来る。
通常は4から20の数値で、つぼみが開く(unfold)成長パターンを使用できる。
lsystem.segment()メソッドは単セグメントを描画するためのコードを含む。
あなた自身が(葉のような)カスタムセグメントを欲しい時、このメソッドを再定義する必要がある。
後に書くであろう。
lsystem.segments(generation, time=None)
lsystem.duration(generation)
lsystem.segments()メソッドは与えられた世代数(そして時間)を育てる為のセグメントの数を返す。
lsystem.duration()全てのセグメントを描画するのに必要なトータルの時間を計算する。
現在のlsystem.costを基にする。
Growing rules
L-systemの形は、ルールの設定に依存する。
ルールは事前定義されたsymbolsの文字列であり、それぞれが変化コマンドを表す。(scale()やrotate()のように)
それで、一つのルールはNodeBoxコードの断片を表すDNAストリングのような小片である。
以下全てのシンボルである。:
- F : systemがここにセグメントを描画する(矩形がデフォルト)
- f : 描画せずに次のポジションへ移動する
- + : lsystem.angleにより反時計回りに回転する
- _ : lsystem.angleにより時計回りに回転する
- | : 180度回転する
- [ : push()コマンドのように動作する。サブブランチの開始
- ] : pop()コマンドのように動作する。サブブランチの終了
- ! : 回転アングルを反転する
- ( : 回転アングルを110%増加する
- ) : 回転アングルを90%に減少する
- < : セグメントの長さを110%増加
- > : セグメントの長さを90%減少
いくつかsymbolを試してみよう!
ルールはシンプルだ:
3つのセグメントを描画する。
tree = lsystem.create()
tree.rules["1"] = "FFF"
tree.draw(50, 150, 1)
2つのセグメントを描画し、時計回りに回転させ、別のセグメントを描画する。
tree = lsystem.create()
tree.rules["1"] = "FF-F"
tree.draw(50, 150, 1)
ルール:( 2つのセグメントを描画し、時計回りに回転する)を描画する。
我々がより多くの世代において生産出来るようにシンボル文字列からルールのキーを参照するように注意せよ。
これが再帰の典型的な例である。
http://en.wikipedia.org/wiki/Recursion
tree = lsystem.create()
tree.rules["1"] = "FF-1"
tree.draw(50, 150, 6)
再帰のポイントで枝が生成され、反時計回りに回転し、セグメントを描画、反時計回りに回転、別のセグメントを描画。
tree = lsystem.create()
tree.rules["1"] = "FF-[1]++F+F"
tree.draw(50, 150, 6)
枝でより多く再帰する
tree = lsystem.create()
tree.rules["1"] = "FF-[1]++F+F+1"
tree.draw(50, 150, 6)
独立した枝々でより複雑なルールセット
tree = lsystem.create(segmentlength=20) tree.rules = { "1" : "FF[-2]3[+3]", "2" : "FF+F-F-F[FFF3][+3]-F-F3", "3" : "FF-F+F+F[2][-2]+F+F2" } tree.draw(50, 150, 6)
Custom segments
デフォルトでは、systemはセグメントの為に線により結合された矩形である。
新しい外観を得るために、自分でセグメントコマンドを書かなければならない。
デフォルトのセグメントコマンドはこのようになる。:
def segment(self, length, generation, time=None, id=None):
push()
line(0, 0, 0, -length)
scale(0.65)
rect(-length/2, -length, length, length)
pop()
L-systemは、セグメントからセグメントへ移動する為にcorner-mode translate()コマンドを使う。
つづく
- Comments (Close): 0
- TrackBack (Close): 0
Ants
- 2008-06-16 (月)
- library/systems
原文http://www.nodebox.net/code/index.php/Ants
Your Own Digital Antfarm (YODA): あなた自身のデジタル蟻の巣を持つことができます!
Antsライブラリは蟻のような小さい動物が、協力して餌を集める行動を実装する、分かり易いツールを提供する。
実際の蟻はpretty coolだ。
彼等は社会的コンテクストにおいて、フェロモンの匂いでコミュニケートして、一緒に働く。
蟻は食べ物を見つけ、墓地を建設し、イモムシに群がる。
(昼間に領域を導き、夜に蟻の巣へ持っていく)
本質的に、Antsライブラリ内のantは4つのシンプルな行動を持つ。
- Wander: 食物の探索で漠然と歩き回る
- Follow: フェロモンの道に遭遇すると、食物へとついて行く。
- Harvest: 食物がそばにあると、収集する。
- Hoard: 食物を運ぶ時、匂いに従ってまっすぐ帰る。
Download
略
Documentation
How to get the library up and running
実行するスクリプトと同じフォルダにAntsライブラリフォルダを置けばNodeboxがライブラリを見付けることができる。 同様に、~/Library/Application Support/NodeBox/に置いても良い。
ants = ximport("ants")
Creating a colony
colony()コマンドは新しいコミュニティーを返す。
n個のant、x,yロケーション,オペレーションする半径rから成る。
colony(n, x, y, r)
返されたcolonyオブジェクトはプロパティを持つ。
- colony.foodsources: エリアの回りのfoodオブジェクトのリスト
- colony.food: 蟻が取り入れたfoodを表す数。
- colony.x: コロニーの水平方向の中心
- colony.y: コロニーの垂直方向の中心
- colony.r: コロニーの半径。
The ants in a colony
colony()コマンドから返されたcolonyオブジェクトは、独立した蟻のリストである。
簡単にループ出来る。:
colony = ants.colony(30, WIDTH/2, HEIGHT/2, 200)
for ant in colony:
print ant.x, ant.y
各antオブジェクトは有用なプロパティを持つ。
- ant.x: antの水平方向の位置。
- ant.y: antの垂直方向の位置。
- ant.has_food: antがコロニーへfoodを運んでいるならTrue。
- ant.trail: antがfoodからcolonyへの道標に使用するpheromone(フェロモン)オブジェクトのリスト
- ant.wandering: round(ぶらついている蟻)の数、コロニーの半径を越えると、蟻はコロニーへ戻る。
各antオブジェクトはメソッドを持つ。
初期メソッドはant.forage()で、通常はfoodを探すantを持つアニメーションの各フレームで呼び出す。
ant.forage(speed=2)
wander, trail, harvestの為のant AIを含むメソッドはソースコードをチェックすること。
ant.goal(obj)
このメソッドは、antの為のゴールとしてx,yプロパティーを持つ、オブジェクトobjをセットする。
antはそれに向かって発進する。
このローレベルのantコマンドは、カスタムなゴールの定義により、蟻の行動を修正することが出来る。
ant.near(obj, radius=10)
このコマンドは何かがすぐ近くにあるかチェックする。
もし、オブジェクトのx,yプロパティーがantの半径内にあればTrueを返す。
このローレベルのantコマンドはゴールに届く際のカスタムな行動の定義により、antの行動を修正出来る。
Food
food()コマンドは蟻が収集する為の新しい食物の塊を作る。
colony内へfoodsourcesリストを加えると、蟻は見付けることが出来る。
food(x, y, size)
for i in range(8): x = 50 + random(WIDTH-100) y = 50 + random(HEIGHT-100) s = random(20,40) colony.foodsources.append(ants.food(x,y,s))
Pheromones
ant.trailのリストはfoodとhome間の道標に使うpheromoneを含む。
フェロモンオブジェクトは、効果範囲(strength)のx, yポジションを持ち、フェロモン効果を減少させるevaporate()メソッドを持つ。
フェロモンの匂いが強ければ、より多くの蟻を引き寄せる。
- Comments (Close): 0
- TrackBack (Close): 0
Boids
- 2008-06-15 (日)
- library/systems
fromhttp://www.nodebox.net/code/index.php/Boids
Boidsライブラリは鳥の群や魚の学校のような動物の器用な行動を実行を提供する。
このライブラリは
Craig W. Reynolds flocking model http://www.red3d.com/cwr/boids/
Conrad Parker's pseudocode http://www.vergenet.net/~conrad/boids/pseudocode.html
をベースにしている。
主として、boid(群の中の単要素)は、3つの簡単な行動の操作がある。
- Separation(分離): ローカルの群の仲間(local flockmate)が混雑するのを避ける操作
- Alignment(整列): local flockmateの平均の方向への操作
- Cohesion(結合): local flockmateが平均の位置へ近付ける操作
美点として、flockは事前に定義された飛行経路を持たなし、動作を説明する少しの数学も無いことである。:
flockは完全かつ自然に、自己-組織化している。
Download
(省略)
Documentation
How to get the library up and running
実行するスクリプトと同じフォルダにBoidsライブラリフォルダを置けばNodeboxがライブラリを見付けることができる。
同様に、~/Library/Application Support/NodeBox/に置いても良い。
boids = ximport("boids")
Creating a flock
flockf()コマンドはn個のboidから成る新しいflockを返す。
群内の個体はx,y,幅w,高,で括られた籠に入れられる。
flock(n, x, y, w, h)
返されたflockオブジェクトは数種類のプロパティを持つ。
- flock.scattered: 群が混乱して点在しているときTrue
- flock.has_goal: 群が興味のある一定の点の周りに群がっているとTrue
- flock.flee: 群がゴールを持っているが、実際にはそれから逃げている時にTrue
返されたflockオブジェクトはまた数種類のメソッドを持つ。
最初のメソッドはflock.update()で、これは通常アニメーションの各フレームでcallする。
flock.update(shuffled=True,
separation-10, alignment=5, cohension=100,
goal=20, limit=30)
flock.update()が呼び出される度に、boidsはフライトパターン内で別のステップへ動く。
6つのオプションパラメータがある。
デフォルトではflockは全ての独立したboidsの流体運動を確実にするためにシャッフルされる。
異なった群れの振舞いを得るために他のパラメータをいじくり回すことができる。
flock.scatter(chance=0.005, frames=50)
flock.perch(ground=None, chance=1.0, frames=lambda:25+random(50))
flock.goal(x, y, z, flee=False)
flock.nogoal()
flock.copy()
flock.scatter()メソッドはboidsのcohesion(結合)とalignment(整列)を元に戻す。
flockは各アップデート毎に、0.0から1.0のchanceでscatteringする。
一度scatterすると、混乱は、フレームの与えられた数値を維持する。
flock.perch()メソッドはboidsの休止の制御をする。
y-ポジションがグランドより大きいboidsは0.0から1.0のchanceで休止する。
通常chanceは1.0である。:
グラウンドに当たると、飛行を続けられない。
chanceが1.0未満のの時は水を示す。
boidは与えられたフレームの数を休止する。
flock.goal()メソッドはflockが興味あるものを探し、近付き、群がる傾向を持つ点を定義する。
flock.nogoal()メソッドは現在のgoalを除去する。
The boids in a flock
flockコマンドから返されたflockオブジェクトは独立したboidsのリストになる。
簡単にループできる。
flock = boids.flock(10, 0, 0, WIDTH, HEIGHT)
for boid in flock:
print boid.x, boid.y
各boidオブジェクトは有用なプロパティーを持つ。
- boid.x: boidの水平方向の位置
- boid.y: boidの垂直方向の位置
- boid.z: boidの深さ
- boid.angle: boidの現在の向き
- boid.is_perching: boidがグラウンドで休止しているとTrue
- Comments (Close): 0
- TrackBack (Close): 0
Category:Home/library (Total 7 items)
≪ 6-7 | 1-5