vpythonのメモ
インストール
pip版はエラーでうまく使えなかった.aptでインストールする.
$ sudo apt-get install python-visual
メモ
- 座標系は右手系(xは→,yは↑,zは手前方向)(ODEも右手系なので悩む必要はない)
- 右マウスぐりぐりで回転.両方押しでスパン.
- cylinder, arrow, cone, pyramid のposは一つの端面,対してbox, sphere, ring の posは中心.
- curveでラインをかけるけど、順次curveオブジェクトに点を追加(append)することで直線を伸ばしていくことができる.
- rate(100)は前回のrateから「最大」1/100秒待つ。「最大」というのが重要で、sleep(100)みたいに1/100[sec]待つわけじゃなくて、あくまでも前のrate()呼び出しから最大で待つ時間。だから、例えば他の処理ですでに0.005秒使っていたら、残りは0.005しか待たないし、そもそも0.01をすでに使いきっていたら止まらない。
- テキストを入れたいときはlabel.
例
サンプルとして公式のチュートリアルの例が下記. ボールが箱のなかで跳ね返るアニメーション.進む向きと大きさ(速度ベクトルの軸と大きさ)と軌跡を描く.注意点としてはsphereにverocity, trailなどのプロパティは無くて,その場で定義している.
import random from visual import * def draw_box(w): box(pos=(w/2, 0,0), size=(0.1, w, w), color=color.red) box(pos=(-w/2, 0,0), size=(0.1, w, w), color=color.red) box(pos=(0,w/2,0), size=(w, 0.1, w), color=color.green) box(pos=(0,-w/2,0), size=(w, 0.1, w), color=color.green) box(pos=(0,0,-w/2), size=(w, w, 0.1), color=color.blue) box_size=10 draw_box(box_size) # ball ball = sphere(color=color.white, radius=0.2, pos=(0,0,0)) ball.v = vector(random.random(), random.random(), random.random()) dt = 0.3 v_arrow = arrow(pos=ball.pos, axis=ball.v*3, color=color.yellow) ball.trail = curve(color=ball.color) l = label(pos=(-box_size/2, -box_size/2, box_size/2), text='pos=', box=0) while 1: rate(100) ball.pos = ball.pos + ball.v*dt v_arrow.pos, v_arrow.axis= ball.pos, ball.v*3 ball.trail.append(pos=ball.pos) if not (-box_size/2 < ball.x < box_size/2): ball.v.x = -ball.v.x if not (-box_size/2 < ball.y < box_size/2): ball.v.y = -ball.v.y if not (-box_size/2 < ball.z < box_size/2): ball.v.z = -ball.v.z l.text = 'pos=%s' % ball.pos if scene.kb.keys: key = scene.kb.getkey() if key == 'q' or key == 'Q': display.exit = 1 exit()