2015年12月12日土曜日

vpython pyode 座標





# 最終結論GeomBoxの引数の順所が違ったためボールをすりぬけていた。
#        #self.geom = ode.GeomBox(
#        #        space=field.space, lengths=(w, h, l))
#        self.geom = ode.GeomBox(
#                space=field.space, lengths=(l, h, w))
#
# 以下のコードは必要ない
#        #self.vbox.rotate(angle=pi/2.0, axis=(0,1,0))
#        #y軸方向右ねじに回転


E:\myprg_main\python_my_prg\ode_prg\zahyou.py


# coding: UTF-8
#vpythonとpyodeの座標は完全に一致するみたい
#geomだけ座標かパラメータの順番がちがうのかもしれない

#またvpythonとpyodeの座標がわからなくなってきたので......
# vpythonのboxの座標の図 ↓
# E:\howm\gazou\vpython_box.jpg

import ode
from visual import *
import ode

scene = display(
    title='field', width=640, height=520, autoscale=0,
    x=0, y=380,
    forward=norm((0.5,-0.5,-1)),
    range=(15,15,15))
    # range     座標軸それぞれに沿った中心:center から対象領域への広がりを意味
    #autoscale = 0 のとき自動的にスケールを設定しません
    # http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/visualj/display.html
    #scene.mouse.camera

## vpython
#ボックスを描く
vbox = box(pos=(0, 2, 0),length=4,height=1,width=2)
# c言語のodeの座標の図 ↓ に合わせて 
# E:\howm\gazou\ode_c_zahyou.jpg
# 原点:黄色 xプラス方向:赤 yプラス方向:青 zプラス方向:緑 
# の色のボールをおく
hirosa = 20               
ball_o = sphere(pos=(0, 0, 0), radius=0.5, color=color.yellow)
ball_x = sphere(pos=(hirosa/2, 0, 0), radius=0.5, color=color.red)
ball_y = sphere(pos=(0, hirosa/2, 0), radius=0.5, color=color.blue)
ball_z = sphere(pos=(0, 0, hirosa/2), radius=0.5, color=color.green)

#「床」をわかりやすくするため x軸方向:赤の線 z軸方向:緑の線を引っ張る
for x in range(-hirosa/2, hirosa/2+1):
    trail = curve(pos=[(x, 0, -hirosa/2), (x, 0, hirosa/2)], color=visual.color.green)
for z in range(-hirosa/2, hirosa/2+1):
    trail = curve(pos=[(-hirosa/2, 0, z), (hirosa/2, 0, z)], color=visual.color.red)

# pyode
world = ode.World()
space = ode.Space()
bodyx = ode.Body(world)
bodyx.setPosition((hirosa/3, 0, 0))
geomx = ode.GeomSphere( space=space, radius=0.2)
geomx.setBody(bodyx)
posx = bodyx.getPosition()
geom_ballx = sphere( pos=posx, radius=0.2, color=color.red)

bodyy = ode.Body(world)
bodyy.setPosition((0, hirosa/3, 0))
geomy = ode.GeomSphere( space=space, radius=0.2)
geomy.setBody(bodyy)
posy = bodyy.getPosition()
geom_bally = sphere( pos=posy, radius=0.2, color=color.blue)

bodyz = ode.Body(world)
bodyz.setPosition((0, 0, hirosa/3))
geomz = ode.GeomSphere( space=space, radius=0.2)
geomz.setBody(bodyz)
posz = bodyz.getPosition()
geom_ballz = sphere( pos=posz, radius=0.2, color=color.green)

0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ページ

Featured Posts