VPython是近几年非常流行的Python扩展库,被广泛应用在科学研究和中学教学中.它是一个非常方便的3D建模工具.
请先看一个简单的例子:
from visual import * floor = box(length=4, height=0.5, width=4, color=color.blue) #创建地平面 ball = sphere(pos=(0,4,0), color=color.red) #创建一个球 ball.velocity = vector(0,-1,0) #设置球的速度向量 dt = 0.01 while 1: #无限循环 rate(100) #刷新时间间隔,值越大时延越短 ball.pos = ball.pos + ball.velocity*dt #每次球的位置S = S0 + V*dt,标准直线运动的微分形式 if ball.y < 1: #球的高度小于1时,认为已经碰到地面,则反向运动,模拟了一个反弹的动作 ball.velocity.y = -ball.velocity.y else: ball.velocity.y = ball.velocity.y - 9.8*dt #否则,继续做匀加速直线运动(自由落体,幅度向下为负)
上面是一个相当简单的程序,却精确地模拟了自由落体运动的全过程,甚至包括反弹.
下面是程序的运行效果:
先来看一下VPython的坐标系问题:
坐标系如图所示,箭头方向表示正向,+z方向是朝向我们的.其坐标原点为(0,0,0).在默认情况下,坐标是自适应的,系统会自动把物体居中并缩放到合适的大小.
其次,如果操作视图的问题. 按下鼠标右键并移动可以转动视角,同时按下鼠标左右键并移动则可以缩放视图.使用起来非常方便.
之后, 结合一下python的语法和面向对象的知识,就可以开始建模了!
下面这个模型是Kadir Haldenbilen老兄建立的直流电机模型,相当有意思,他把直流永磁电机的每一个部件都绘制的惟妙惟肖,让人赞叹不已. 先上一个动画吧:
这个模型的建立依赖于VisualPython5.50版本以后推出的extrusion()函数和shape对象,可以通过shape建立平面模型,然后把这个平面通过旋转成为一个立体.
具体细节,请参考安装后的C:\Python2X\Lib\site-packages\visual\examples\下的相应源代码.关于VPython请参考http://vpython.org.