読者です 読者をやめる 読者になる 読者になる

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()