curve オブジェクト

curve オブジェクトは幾つかの点を結んだ直線でできる形です。点の数が十分に多くて近ければ、その概観はスムーズな曲線に見えます。また curve 表示の基本的な使い方として関数のプロットの例もあります。

pos and color などの属性は curve の点ごとに変えられます。 これらの属性は Numerc 配列として保存されます。 Python モジュール Numeric は強力な配列処理能力を備えています。例えば二つの配列は足し合わせることができます。Numeric 配列は通常の python 規則のように n 番目のシーケンス要素を参照できます。すなわち シーケンス変数 seq が与えられたとき seq[0] が最初の seq, seq[1] が二番目の、seq[2] が三番目の要素です・・・・。 ). 例えば curve オブジェクトで anycurve.pos[0]anycurve の最初の点の位置を意味します。

curve に丸括弧で囲んだ座標のリストを設定できます。Python でのシーケンスのときと同じです。下に二次元での資格の例を示します。

square = curve(pos=[(0,0),(0,1),(1,1),(1,0),(0,0)])

(1,1) は (1,1,0) を短く書いたものです。ただし 2D と 3D の座標点を一つのリストに混在させることはできません。

curve は断面の半径で示される厚みを持ちます。(curve の厚み又は直径は半径の二倍です)

curve(pos=[(0,0,0), (1,0,0), (2,1,0)], radius=0.05)

半径のデフォルト値は 0 です。これは細い curve を描きます。ゼロでない半径は curve に厚みを与えます。でもあまり小さな半径を設定すると、 curve は見えなくなってしまいます。

次の例では arange()関数 (Python の Numeric モジュールで実装されています。Numeric モジュールは Vsual モジュールよって import されています。) は ステップ 0.1 で 0 から 29 まで増加する数列を意味します(最後の値 29 は含みません)。

c = curve( x = arange(0,20,0.1) ) # Draw a helix

c.y = sin( 2.0*c.x )

c.z = cos( 2.0*c.x )

The x, y, and z 属性を利用することで curve を関数グラフの表示に使えます。

curve( x=arange(100), y=arange(100)**0.5, color=color.red)

関数をグラフ化するプログラムは下のようになります。( import visual * 行を追加すれば実際に動作するグラフ化 python プログラムになります。)

eqn = raw_input('Equation in x: ')

x = arange( 0, 10, 0.1 )

curve( x=x, y=eval(eqn) )

係数引数を使ったグラフ化も簡単です。

t = arange(0, 10, 0.1)

curve( x = sin(t), y = 1.0/(1+t), z = t**0.5,
red = cos(t), green = 0, blue = 0.5*(1-cos(t)) )

curve 属性として、下のようなものがあります。

pos[]:curve を構成する点の位置の配列です: pos[0], pos[1], pos[2]....
現在の点の個数は len(curve.pos) で与えられます。

x[ ], y[ ], z[ ] :pos の要素です。それぞれのデフォルト値は[0,0,0,...] です。

color[ ]:curve を構成する点の色です

red[ ], green[ ], blue[ ] も curve を構成する点の色要素です。

radius:curve 断面の半径です。
デフォルトの radius = 0 は細い curve になります。

 

点を curve に付け加える

curve は append() 関数によって 除々に長くなります。 新しく付け加えられた点は最後の点となります。

helix = curve( color = color.cyan )

for t in arange(0, 2*pi, 0.1):

    helix.append( pos=(t,sin(t),cos(t)) )

curve の良く使われる手段の一つとして、動くオブジェクトの後に残される経路を描くことがあります。球が動くとき、経路に点を追加していきます。

trail = curve()

ball = sphere()

...# Every time you update the position of the ball:

trail.append(pos=ball.pos)

 

補完

curve には一つの点から隣の点に移るとき補完する機構があります。例えば下の例のように最初の三つの点が赤で、四番目の点が青だとします。最初の三つのてんは全部赤です。しかし三つ目の点(赤色)から四つ目の点に(青色)移るときは赤から青に色が混ぜ合わされて表示されます。

c = curve( pos=[(0,0,0), (1,0,0)], color=color.red )

c.append( pos=(1,1,0) ) # add a red point

c.append( pos=(0,1,0), color=color.blue) # add blue point

色や太さを急激に変化させたいときは、単純に別の点を同じ位置に追加します。下の例では青色の点を、三番目の赤色の点と同じ位置に追加しています。このようにして最後の区間を純粋な青色とできます。

c = curve( pos=[(0,0,0), (1,0,0)], color=color.red )

c.append( pos=(1,1,0) ) # add a red point

c.append( pos=(1,1,0), color=color.blue) # same point, blue

c.append( pos=(0,1,0) ) # add blue point