I Love Python. I Learn Python. I Teach Python. I Am a Python.

2014/07/04

用 VPython 來做 3D 動畫。




"""
用 VPython 來做 3D 動畫。

複合圓周運動

    ζ= 0
    for k in range(N+1):
        ζ += exp(1j*2*π*f*t*k)
        
除了漢字之外,

順便把希臘字母

π (pi),
ζ (zeta),
Γ (Gamma),
Φ (Phi)

也拿來用一用。

Renyuan Lyu
2014/07/03
"""

import pylab  as pl
import visual as vs

def 設定背景():
    
    背景色= (.5,.5,.5) # 灰色
    vs.scene.background= 背景色

    三軸向量= [(1,0,0), (0,1,0), (0,0,1)]
    三軸向量= [vs.vector(a) for a in 三軸向量]
    for a in 三軸向量:
        vs.arrow(axis= a, color= a, shaftwidth= 0.01)

    info= '''ζ = Σ exp(j 2 π f t k), k in [1,Ν]'''
    vs.text(text= info, align='center',
            pos= (0,2,2),
            height= .2,
            width= .2,
            depth= 0.1,
            color= (1,1,0))

def 實驗01():
    
    頻率=       f = 1
    最大時間=   T = 2
    圓周率= π = pl.pi # 3.1415926
    dt= 0.01

    複指數= exp=  pl.exp
    實部=  real=  pl.real
    虛部=  imag=  pl.imag

    時間範圍= pl.arange
    
    #
    # 畫 曲線 Γ (Gamma)
    #
    t= 時間範圍(0, T, dt)
    
    N= 2
    ζ= 0
    for k in range(1,N+1):
        ζ += exp(1j*2*π*f*t*k)

    x= real(ζ)
    y= imag(ζ)
    z= t
        
    曲線= Γ= vs.curve()
    
    Γ.x= x
    Γ.y= y
    Γ.z= z
    
    Γ.red=   x
    Γ.green= y
    Γ.blue=  z
    
    #
    # 球 Φ (Phi) 沿曲線 Γ 轉
    #
    球= Φ= vs.sphere(pos= (0,0,0), radius= .1, color=(1,1,1))
    
    t= 0
    while True:
        
        ζ= 0
        for k in range(1, N+1):
            ζ += exp(1j*2*π*f*t*k)
        
        x= real(ζ)
        y= imag(ζ)
        z= t

        Φ.pos= (x,y,z)
        Φ.color= (x,y,z)
        
        Φ.visible= True
        vs.rate(100)
        Φ.visible= False

        t += dt

        if (   (T-abs(dt) < t < T) 
            or (0 < t < abs(dt))
            ):
            dt *= -1
    
    Φ.visible= True

if __name__=='__main__':
    
    設定背景()
    實驗01()


沒有留言:

張貼留言